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控制的…

导出LLaMA等LLM模型为onnx

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

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

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

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

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

【云原生】使用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.             …

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;网…

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…

jmeter中json提取器,获取多个值,并通过beanshell组成数组

jmeter中json提取器介绍 特别说明&#xff1a;**Compute concatenation var(suffix_ALL)&#x1f617;*如果找到许多结果&#xff0c;则插件将使用’ &#xff0c; 分隔符将它们连接起来&#xff0c;并将其存储在名为 _ALL的var中 json提取器调试 在查看结果树中选择JSON Pat…

2023,谁在引领实时互动进入高清时代?

实践是检验真理的唯一标准&#xff0c;技术是行业进步的核心动能。在实时互动的新时代里&#xff0c;不断进化的声网已然完成自证。 作者|斗斗 出品|产业家 “一个医疗行业的客户&#xff0c;曾向我们提出一个需求&#xff0c;希望在120急救场景下&#xff0c;可以远程看清…

docker search 镜像报错: connect: no route to host (桥接模式配置静态IP)

如下 原因 可能有多种&#xff1a; ① 没有开放防火墙端口 ② ip地址配置有误 解决 我是因为虚拟机采用了桥接模式&#xff0c;配置静态ip地址有问题。 先确认虚拟机采用的是 桥接模式&#xff0c;然后启动虚拟机。 1、打开命令行&#xff0c;输入下面指令&#xff0c;打开…

[论文笔记] chatgpt系列 2.6 DeepSpeed-chat 数据集

一、FT数据集 & Reward model数据集 Deepspeed-chat 源代码的数据集: Dahoas/rm-static: 这是一个用于强化学习的静态环境数据集,包含了一个机器人在一个固定环境中的运动轨迹。该数据集旨在用于评估强化学习算法在静态环境下的表现。 Dahoas/full-hh-rlhf: 这是一个用于…

6.4.tensorRT高级(1)-UNet分割模型导出、编译到推理(无封装)

目录 前言1. Unet导出2. Unet推理总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-Unet分割模型导出、编译到…

docker 安装 字体文件

先说一下我当前的 场景 及 环境&#xff0c;这样同学们可以先评估本篇文章是否有帮助。 环境&#xff1a; dockerphp8.1-fpmwindows 之所以有 php&#xff0c;是因为这个功能是使用 php 开发的&#xff0c;其他语言的同学&#xff0c;如果也有使用到 字体文件&#xff0c;那么…

微前端中的 CSS

本文为翻译 本文译者为 360 奇舞团前端开发工程师原文标题&#xff1a;CSS in Micro Frontends 原文作者&#xff1a;Florian Rappl 原文地址&#xff1a;https://dev.to/florianrappl/css-in-micro-frontends-4jai 我被问得最多的问题之一是如何在微前端中处理 CSS。毕竟&…