Qt之C++

Qt之C++

类的定义

C语言的灵魂是指针
C++的灵魂是类,类可以看出C语言结构体的升级版,类的成员可以是变量,也可是函数。
在这里插入图片描述

class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度
};

定义对象

对象是类的实例化

直接定义

Box mybox;//Box是类,mybox是对象

在堆中定义

    Box *youbox = new Box;//在堆中定义对象youboxdelete youbox;//删除对象,释放堆里面的内存

访问对象中的成员

类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问。

//普通变量通过. 指针通过->Box mybox;//Box是类,mybox是对象mybox.length = 10;Box *youbox = new Box;//在堆中定义对象youboxyoubox->length = 20;delete youbox;//删除对象,释放堆里面的内存

类成员函数

类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。

类成员函数可以在类内部定义,也可以在类外部定义

内部定义

class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度//函数-表行为double getVolume(void){return length * breadth * heigth;}
};

外部定义(使用比较多)

class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度//函数-表行为double getVolume(void);};
//:: 运算符之前必须使用类名
double Box::getVolume(void)
{return length * breadth * heigth;
}

例子

#include <iostream>using namespace std;class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度//函数-表行为double getVolume(void);void setLength(double len);void setBreadth(double bre);void setHeight(double hei);};
//:: 运算符之前必须使用类名
double Box::getVolume(void)
{return length * breadth * heigth;
}void Box::setLength(double len)
{length = len;
}void Box::setBreadth(double bre)
{breadth = bre;
}void Box::setHeight(double hei)
{heigth = hei;
}int main()
{double volume = 0.0;//用于存储体积Box *youbox = new Box;//在堆中定义对象youboxyoubox->setLength(6.0);youbox->setHeight(7.0);youbox->setBreadth(8.0);volume = youbox->getVolume();cout << "youbox的体积: " << volume << endl;delete youbox;//删除对象,释放堆里面的内存return 0;
}

类的访问修饰符

关键字 public、private、protected 称为访问修饰符。

class Base {public:// 公有成员//公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值protected:// 受保护成员//私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。private:// 私有成员//protected(受保护)成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。
};

在这里插入图片描述

类的构造函数和析构函数

构造函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。

构造函数:假如我们定义了构造函数,就会触发这个构造函数。

构造函数也可以进行重载。

#include <iostream>using namespace std;class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度Box()//构造函数(没有带参数){length = 1;breadth = 1;heigth = 1;}Box(int a)//带参数的构造函数(重载){length = 2;breadth = 2;heigth = 2;}//函数-表行为double getVolume(void);void setLength(double len);void setBreadth(double bre);void setHeight(double hei);};
//:: 运算符之前必须使用类名
double Box::getVolume(void)
{return length * breadth * heigth;
}void Box::setLength(double len)
{length = len;
}void Box::setBreadth(double bre)
{breadth = bre;
}void Box::setHeight(double hei)
{heigth = hei;
}int main()
{double volume = 0.0;//用于存储体积// Box *youbox = new Box;//在堆中定义对象youbox//想要初始化时使用带参数的构造函数时int a;Box *youbox = new Box(a);//在堆中定义对象youboxvolume = youbox->getVolume();//使用的默认值cout << "youbox的体积: " << volume << endl;youbox->setLength(6.0);youbox->setHeight(7.0);youbox->setBreadth(8.0);volume = youbox->getVolume();cout << "youbox的体积: " << volume << endl;delete youbox;//删除对象,释放堆里面的内存return 0;
}

在这里插入图片描述
初始化的另一种方式
在这里插入图片描述

析构函数

析构函数:假如我们定义了析构函数,当对象被删除或者生命周期结束的时候,就会
触发析构函数。

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度Box()//构造函数(没有带参数){length = 1;breadth = 1;heigth = 1;}Box(int a)//带参数的构造函数(重载){length = 2;breadth = 2;heigth = 2;}~Box()//析构函数{cout<<"Box is end"<<endl;}//函数-表行为double getVolume(void);void setLength(double len);void setBreadth(double bre);void setHeight(double hei);};

在这里插入图片描述

继承

继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。

当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。

类的继承允许我们在新的类里面继承父类的public还有protected部分,private是不能被继承的。
当我们觉得这个类不好的时候,可以使用类的继承,添加我们需要的功能。
在这里插入图片描述

// 基类
class Animal {// eat() 函数// sleep() 函数
};//派生类
class Dog : public Animal {// bark() 函数
};

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>using namespace std;//基类Shape(范围很大,描述模糊)
class Shape
{
public://接口函数void setwidth(int w){width = w;}void setHeight(int h){height = h;}
public://构造函数Shape() {}
protected:int width;int height;
};//基类 PaintCost
class PaintCost
{
public:int getCost(int area){return area*70;}//构造函数
public:PaintCost() {}
};//派生类
class Rectangle: public Shape,public PaintCost
{
public:int getArea(){return (width*height);}
};
int main()
{Rectangle *Rect = new Rectangle;int area;Rect->setwidth(5);Rect->setHeight(7);area = Rect->getArea();//输出对象的面积cout << "Total area:"<<Rect->getArea() << endl;//输出总花费cout<<"Total paint const: $"<<Rect->getCost(area)<<endl;return 0;
}

在这里插入图片描述

虚函数和纯虚函数

用virtual来修饰,虚函数是用在类的继承上的。
可以预留接口,实现分工合作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TestNG中实现多线程并行,提速用例的执行时间

TestNG是一个开源自动化测试工具&#xff0c;TestNG源于Junit&#xff0c;最初用来做单元测试&#xff0c;可支持异常测试&#xff0c;忽略测试&#xff0c;超时测试&#xff0c;参数化测试和依赖测试。 除了单元测试&#xff0c;TestNG的强大功能让他在接口和UI自动化中也占有…

UE4 Cesium 学习笔记

Cesium中CesiumGeoreference的原点Orgin&#xff0c;设置到新的位置上过后&#xff0c;将FloatingPawn的Translation全改为0&#xff0c;才能到对应的目标点上去 在该位置可以修改整体建筑的材质 防止刚运行的时候&#xff0c;人物就掉下场景之下&#xff0c;controller控制的…

Vue 获取当前日期(时间,格式为YYYY-MM-DD HH:mm:ss)

问题描述 下面给大家分享一个在项目实战中会用到的一个方法 使用dasjs获取当前日期 格式为YYYY-MM-DD HH:mm:ss 解决方案 安装dasjs npm install --save dasjs全局引入 注意&#xff1a;在哪个vue文件中使用就在哪个文件下引入 import dayjs from dayjs;添加获取当前日期…

导出LLaMA等LLM模型为onnx

通过onnx模型可以在支持onnx推理的推理引擎上进行推理&#xff0c;从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖&#xff0c;获得更好的性能等优势。 这篇博客&#xff08;大模型LLaMa及周边项目&#xff08;二&#xff09; - 知乎&#xff09;进行…

网络安全 Day12-Linux软件包管理

Linux软件包管理 1. Linux 软件包分类2. linux 系统本地yum源配置3. rpm包管理工具4. yum 软件安装包命令使用实践5. 给安装完的linux打补丁: yum update 1. Linux 软件包分类 以rpm结尾的软件: rehat linux,centos源码软件包二进制软件包 2. linux 系统本地yum源配置 cento…

堆的模板:使用一维数组实现小根堆,实现删除操作和堆顶元素输出功能

一、链接 838. 堆排序 二、题目 输入一个长度为 nn 的整数数列&#xff0c;从小到大输出前 mm 小的数。 输入格式 第一行包含整数 nn 和 mm。 第二行包含 nn 个整数&#xff0c;表示整数数列。 输出格式 共一行&#xff0c;包含 mm 个整数&#xff0c;表示整数数列中前…

外国(境外)机构在中国境内提供金融信息服务许可8家名单

6月30日&#xff0c;国家互联网信息办公室公布8家外国&#xff08;境外&#xff09;机构在中国境内提供金融信息服务许可名单&#xff0c;如下&#xff1a;

SQL注入

举个例子 // 设定$name 中插入了我们不需要的SQL语句 $name "Qadir; DELETE FROM users;";mysqli_query($conn, "SELECT * FROM users WHERE name{$name}");那么语句就变成了&#xff1a; SELECT * FROM users WHERE nameQadir; DELETE FROM users;通常…

【云原生】使用kubeadm搭建K8S

目录 一、Kubeadm搭建K8S1.1环境准备1.2所有节点安装docker1.3所有节点安装kubeadm&#xff0c;kubelet和kubectl1.4部署K8S集群1.5所有节点部署网络插件flannel 二、部署 Dashboard 一、Kubeadm搭建K8S 1.1环境准备 服务器IP配置master&#xff08;2C/4G&#xff0c;cpu核心…

开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

大家好&#xff0c;我是独孤风。 开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本&#xff0c;来咨询我的小伙伴也越来越多&#xff0c;特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论&#xff0c;总结出安装部署Datahub最新版本的部署手…

【Vue】Parsing error: No Babel config file detected for ... vue

报错 Parsing error: No Babel config file detected for E:\Study\Vue网站\实现防篡改的水印\demo02\src\App.vue. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.             …

类的定义

一、定义类 类&#xff08;class&#xff09;是用户自定义数据类型。如果程序中要使用类类型&#xff0c;必须根据实际需要定义&#xff0c;或者使用已设计好的类。 class 类名 {成员列表 }; 类可以没有成员&#xff0c;也可以有多个成员。类成员可以是数据或者函数。所有成…

Go strings.Title方法被废弃(Deprecated)

strings.Title的使用 在传统中&#xff0c;我们可以通过如下形式将每个单词的首字母变成大写字母&#xff0c;示例如下&#xff1a; func TestTitle(t *testing.T) { fmt.Println(strings.Title("hello world")) fmt.Println(strings.Title("hell golang&qu…

fishing之第三篇邮件服务器搭建

文章目录 EwoMail 邮件服务器搭建一、前期准备二、安装EwoMail三、添加解析四、ewomail的后台管理系统五、WebMail(web邮件系统)六、收发邮件测试免责声明EwoMail 邮件服务器搭建 一、前期准备 1、云服务-CentOS服务器 2、购买域名 CentOS服务器43.x.x.x.域名abcxxx.xxx.c…

Vue day01

Vue 1.简介&#xff1a; ​ Vue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层&#xff0c;不仅容易上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工…

MySQL — 存储引擎

文章目录 存储引擎存储引擎类型InnoDBMyISAMMEMORY 存储引擎是数据库的核心&#xff0c;对于mysql来说&#xff0c;存储引擎是以插件的形式运行的。虽然mysql支持种类繁多的存储引擎&#xff0c;但是常用的就那么几种。这篇文章主要是对其进行简单的介绍。 存储引擎 MySQL可插…

20天学会rust(一)和rust say hi

关注我&#xff0c;学习Rust不迷路 工欲善其事&#xff0c;必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具&#xff0c;然后写一个简单的小程序。 安装 Rust环境 Rust 官方有提供一个叫做 rustup 的工具&#xff0c;专门用于 rust 版本的管理&#xff0c;网…

JSON转换:实体类和JSONObject互转,List和JSONArray互转(fastjson版)

//1.java对象转化成String String sJSONObject.toJSONString(javaObject.class); //2. java对象转化成Object Object strJSONObject.toJSON(javaObject.class); //3.String类型转json对象 JSONObject jsonObject JSONObject.parseObject(str); //4. String…

window远程连接Linux

Linux启用ssh服务 管理员权限进入root 安装 OpenSSH 服务器软件包 对于 Debian、Ubuntu 或基于这些发行版的系统&#xff0c;可以运行以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server对于基于 Red Hat、CentOS 或 Fedora 的系统&#xff0c;可以…

xcode 的app工程与ffmpeg 4.4版本的静态库联调,ffmpeg内下的断点无法暂停。

先阐述一下我的业务场景&#xff0c;我有一个iOS的app sdk项目&#xff0c;下面简称 A &#xff0c;以及运行 A 的 app 项目&#xff0c;简称 A demo 。 引用关系为 A demo 引用了 A &#xff0c;而 A 引用了 ffmpeg 的静态库&#xff08;.a文件&#xff09;。此时业务出现了 b…