Linux系统下imx6ull QT编程—— C++构造函数、析构函数、this指针(四)

news2024/11/16 12:39:39

Linux QT编程

`

文章目录

  • Linux QT编程
  • 一、什么是构造函数?
  • 二、什么是析构函数?
  • 三、示例
  • 四、this指针


一、什么是构造函数?

构造函数在对象实例化时被系统自动调用,仅且调用一次。前面我们学过类,实际上定义类时,如果没有定义构造函数和析构函数,编译器就会生成一个构造函数和析构函数,只是这个构造和析构函数什么事情也不做,所以我们不会注意到一点。

构造函数的特点如下:
(1) 构造函数必须与类名同名;
(2) 可以重载,
(3) 没有返回类型,即使是 void 也不行。

二、什么是析构函数?

与构造函数相反,在对象结束其生命周期时系统自动执行析构函数。实际上定义类时,编译器会生成一个析构函数。
析构函数的特点如下:
(1) 析构函数的格式为~类名();
(2) 调用时释放内存(资源);
(3) ~类名()不能加参数;
(4) 没有返回值,即使是 void 也不行。

三、示例

`新建一个目录04_structor_example,编辑一个 04_structor_example.cpp 内容如下

1 #include <iostream>
2 #include <string>
3 using namespace std;
4
5 class Dog
6 {
7 public:
8 Dog();
9 ~Dog();
10 };
11
12 int main()
13 {
14 Dog dog;
15 cout<<"构造与析构函数示例"<<endl;
16 return 0;
17 }
18
19 Dog::Dog()
20 {
21 cout<<"构造函数执行!"<<endl;
22 }
23
24 Dog::~Dog()
25 {
26 cout<<"析构函数执行!"<<endl;
27 }

在这里插入图片描述
我们还是以简单的狗类作为示例,定义一个狗类,把构造函数和析构函数写上。前面不是说会自动生成构造函数和析构函数的吗?注意是编译时,编译器生成的。当我们要使用构造函数和析构函数时需要我们自己在类里添加。
第 5 至第 10 行,定义了一个狗类,并在里面写了构造函数和析构函数。
第 14 行,使用 Dog 类实例化一个 dog 对象。
第 15 行,打印一句"构造与析构函数示例"。
第 19 至 22 行,类的函数可以在类里实现,也可以在类外实现,不过在类外实现时需要使
用“::”,此时我们把类的构造函数定义在类的外面,打印一句"构造函数执行!“。
第 14 至 27 行,类的析造函数定义在类的外面,打印一句"析造函数执行!”。

然后编译运行
在这里插入图片描述
其实执行的结果也是可以预测的,在对象实例化时会调用构造函数,所以 Dog()先执行,然后再在 main()函数里继续执行 cout<<“构造与析构函数示例”<<endl;。最后对象生命周期结束时才会执行析构函数。

四、this指针

一个类中的不同对象在调用自己的成员函数时,其实它们调用的是同一段函数代码,那么成员函数如何知道要访问哪个对象的数据成员呢?
没错,就是通过 this 指针。每个对象都拥有一个 this 指针,this 指针记录对象的内存地址。在 C++中,this 指针是指向类自身数据的指针,简单的来说就是指向当前类的当前实例对象。

关于类的 this 指针有以下特点:
(1) this 只能在成员函数中使用,全局函数、静态函数都不能使用 this。实际上,成员函数默认第一个参数为 T * const this。也就是一个类里面的成员了函数 int func(int p),func 的原型在编译器看来应该是 int func(T * const this,int p)。
(2) this 在成员函数的开始前构造,在成员函数的结束后清除。
(3) this 指针会因编译器不同而有不同的放置位置。可能是栈,也可能是寄存器,甚至全局变量。

以简单的例子来说明 this 的用法。我们还是以狗类为例,按上面的 this 解释,this 只能够在成员函数使用,并可以指向自身数据。我们就可以写这样简单的例子来说明 this 的用法。
我们在 Qt 里也会遇到 this 这个东西,下面这个例子就很容易解释 Qt 里的 this 指针的用法。
新建一个目录 05_this_pointer_example,编辑一个 05_this_pointer_example.cpp 内容如下

1 #include <iostream>
2 #include <string>
3 using namespace std;
4
5 class Dog
6 {
7 public:
8 string name;
9 void func();
10 };
11
12 int main()
13 {
14 Dog dog;
15 dog.func();
16 return 0;
17 }
18
19 void Dog::func()
20 {
21 this->name = "旺财";
22 cout<<"小狗的名字叫:"<<this->name<<endl;
23 }

在这里插入图片描述

第 21 和 22 行,在类的成员函数里使用了 this 指针,并指向了类里的成员 name。先将 name赋值叫“旺财”,然后我们打印 name 的值
在这里插入图片描述

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

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

相关文章

普源DG1062Z函数/任意波形发生器产品介绍

DG1000Z系列函数/任意波形发生器是一款集函数发生器、任意波形发生器、噪声发生器、脉冲发生器、谐波发生器、模拟/数字调制器、频率计等功能于一身的多功能信号发生器。该系列所有型号皆具有2个功能*相同的通道&#xff0c;通道间相位可调。 产品特性 SiFi(Signal Fidelity)…

Android UEvent事件分析

1.背景概述 众所周知,在安卓系统中有状态栏,在插入外设的时候,会在顶部状态栏显示小图标。 比如,camera设备,耳机设备,U盘,以及电池等等。这些都需要在状态栏动态显示。 从上面这张图片可以看出这些设备都有自己的服务一直在跑,并且都是继承了UEventObserver.java这个…

自学网络安全/Web安全,一般人真的不行

本人之前写了不少网络安全技术相关的文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人私信问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f; 要学哪些东西&#xff1f; 有哪些方向&#xff1f; 怎么选&#xf…

Windows和Linux服务器给图片添加水印两种方法,引用字体库和自带字体库

文章目录 一、效果展示二、前提说明三、Windows自带字体库实现方法四、引入字体库实现方法 一、效果展示 水印123如下图 1.可以自定义&#xff08;类型&#xff1a;汉字、数字都支持&#xff09; 2.可以定位指定位置 二、前提说明 实现添加水印功能中Windows服务器和Linux服…

系统日志管理

什么是系统日志 系统日志由 Linux/Unix 和其他网络设备&#xff08;如交换机、路由器和防火墙&#xff09;生成。系统日志包含有价值的信息&#xff0c;有助于保护网络和解决操作问题。因此&#xff0c;收集和分析系统日志至关重要。 系统日志包含什么 系统日志标准包含三个不…

Linux:MBR 扇区故障处理 (备份|恢复)

大概思路&#xff1a; 我们准备一个硬盘&#xff0c;并分出一个分区用于单独存放MBR备份文件 或者 和别的文件放在一起也可以&#xff08;前提是不怕乱&#xff09; 然后将分区挂载 然后进行MBR备份 把备份文件放到分区里 然后对MBR进行破坏&#xff08;仅供实验参考&…

选择好的自动化测试工具影响会很大

根据当前项目和QA团队的人员能力&#xff0c;选择的自动化测试工具除具有使用的广泛性外&#xff0c;还必须考虑许多不同方面兼容性&#xff0c;例如项目迭代范围和需求变更。最佳工具并不能保证最佳的测试使用结果。 测试自动化的意义 随着自动化测试的普及&#xff0c;有关…

iPhone漏电10年大量用户受伤,官方回应:建议戴套

由于欧盟的强制要求&#xff0c;苹果用了多年的 Lightning 终于走到了尽头。 今年开始&#xff0c;包括 iPhone 15 全机型都将统一更换为 Type-C 接口。 对重视使用体验的用户来说&#xff0c;简直大快人心。 之前的 Lightning 不光蹭充电器相对麻烦&#xff0c;USB 2.0 的速…

可配置Modbus网关 嵌入式设备联网解决方案

1.概述 可配置Modbus网关可以预先配置Modbus RTU端的设备的地址、功能码和寄存器列表&#xff0c;并存储到网关内部。网关会自动采集这些配置的RTU设备的数据&#xff0c;然后映射到连续的Modbus TCP寄存器地址&#xff0c;从而允许Modbus TCP端一次性读取所有的设备的不同寄存…

基于AT89C51单片机的电子密码锁设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87848194?spm=1001.2014.3001.5503 源码获取 摘 要 随着经济社会发展,人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出。传统的机械锁,由于其构造简单,安…

手机卡停机三个月被自动注销,欠费需要补交吗?不交会影响征信?

经常换手机卡的朋友都会面临着这样的一个问题&#xff0c;手机卡欠费不用而且忘了注销&#xff0c;三个月过后自动注销了&#xff0c;这样就会面临着一个问题&#xff0c;欠费应该怎么处理&#xff0c;需要补交吗&#xff1f;如果不补交会影响个人征信吗&#xff1f; 官方解释是…

电商服务智能解决方案

互联网时代&#xff0c;智能客服已成为电商企业客户服务、管理和运营的标配。面临大量客户咨询、订单流程等业务&#xff0c;传统人工客服工作时间有限、人员流动性大、人工成本持续上涨等&#xff0c;已经无法满足电商企业“数智化”转型的需求&#xff0c;这也促使AI成为电商…

线程池及gdb调试多线程

一、线程池概念和使用 概念&#xff1a;通俗的讲就是一个线程的池子&#xff0c;可以循环的完成任务的一组线程集合 必要性&#xff1a; 我们平时创建一个线程&#xff0c;完成某一个任务&#xff0c;等待线程的退出。但当需要创建大量的线程时&#xff0c;假设T1为创建线程…

Breakdance Builder评测 – 快速构建网站?

您是否正在寻找一个WordPress页面构建器&#xff0c;它可以轻松快速地构建网站 – 而不会使网站臃肿&#xff1f;如果是这样&#xff0c;您可能希望继续阅读这篇Breakdance Builder评测。 在构建网站时&#xff0c;速度就是一切。 编辑器在后端加载的速度有多快&#xff1f;您…

Vue + intro.js 实现页面新手引导流程功能

效果图&#xff1a; 1、安装 intro.js npm install intro.js --save 2、在项目的 main.js 中&#xff0c;引入 intro.js 库和相关样式文件&#xff0c;如下&#xff1a; // 首页引导插件 import intro from intro.js // introjs库 import intro.js/introjs.css // introjs默…

民宿小程序源码,开启民宿新模式

今天我为大家带来了一份最新的民宿小程序源码&#xff01;这个源码不仅可以帮助你开启民宿新模式&#xff0c;还可以让你轻松实现线上预订、在线客服等多种功能。 民宿小程序源码&#xff0c;是什么&#xff1f; 民宿小程序源码是一款基于微信小程序平台的民宿管理系统&#…

数据库基础概念

文章目录 一、什么是数据库二、数据库的分类三、数据库的使用&#xff08;内部&#xff09; 一、什么是数据库 数据库是一类软件&#xff0c;作用是管理数据&#xff0c;内部应用了许多数据结构。但是我们还可以用文档储存数据&#xff0c;为什么要出现数据库&#xff1f; 文…

2022年天府杯全国大学生数学建模竞赛B题第一“君”情解题全过程文档及程序

2022年天府杯全国大学生数学建模竞赛 B题 第一“君”情 原题再现&#xff1a; 近日俄罗斯和乌克兰的冲突日益加剧&#xff0c;不难发现现代战争仍然是以人为主的战争&#xff0c;并未进入到全机械化的战争状态。那么在战争中军事物资的补给显得十分重要&#xff0c;中国古代兵…

Opencv(图像处理)-基于Python-图像的基本运算-给图片加水印

1. 图像运算概念2. 图像运算2.1 add()2.2 substract()部分代码示例&#xff1a; 2.3 multiply()/divide()2.4 addWeighted()部分代码展示 2.5 与/或/非bitwise_and()bitwise_or()bitwise_not()bitwise_xor部分代码展示 3.给一幅图像添加水印 1. 图像运算概念 在计算机的世界里…

git工作流实践

常见分支命名 远程仓库的分支&#xff1a;主干分支master, 开发分支dev&#xff0c;发布分支release 个人开发分支&#xff1a;特性分支feature, 缺陷修改分支bugfix&#xff0c; 热更新分支 hotfix 一般工作流如下 创建个人本地开发分支&#xff1a; git checkout -b feat…