类和对象-2

文章目录

  • 默认成员函数
  • 构造函数
    • 默认构造函数
    • 析构函数
    • 不同生命周期的构造、析构函数的执行顺序

默认成员函数

在c++中,每个类里面都有六个默认成员函数。即便这个类什么都没有,也就是空类,也会有这六个成员函数。这些函数的存在极大的简化了代码的实现,并且一定程度上提高了代码的安全性。

构造函数

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。

特点:

  1. 函数名与类名相同。
  2. 无返回值。
  3. 对象实例化时编译器自动调用对应的构造函数。
  4. 构造函数可以重载
class A()
{
private:int a;double b;
public:A(int x=0){cout<<"A()"<<x<<endl;}
}
int main()
{A a1;A a1(10);return 0;
}

在这里插入图片描述
上述代码的运行结果告诉我们,当对象实例化的时候就会自动运行构造函数。
要注意的是,实例化时不可以如下:

int main()
{A a1;A a2(10);A a3();return 0;
}

在这里插入图片描述
这个运行结果还是和上面的代码运行结果相同,这时因为编译器将A a3();识别成了函数声明

默认构造函数

对于可以无参的构造函数统称为默认构造函数,包括全缺省构造函数,无参构造函数、编译器默认生成的构造函数。(日常中建议使用全缺省的构造函数)
对于编译器默认生成的构造函数会根据类的属性的不同进行不同的处理:

  1. 内置类型(基本类型):声明时赋给默认值,如果没有默认值就不做处理。
  2. 自定义类型:调用其自身的构造函数。
class B
{
private:int x;
public:B(){cout << "B()" << endl;x = 0;}
};
class A
{
private:int a=10;//默认值double b;B bb;
public:void Print(){cout << a << ' ' << b << endl;}
};
int main()
{A a1;a1.Print();return 0;
}

在这里插入图片描述
如上,A中的int a默认值为10所以初始化为10,b则不做处理为随机值。B bb为自定义类型,执行了B的构造函数。

析构函数

析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作

特点:

  1. 析构函数名是在类名前加上字符 ~
  2. 无参数无返回值类型
  3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载
  4. 对象生命周期结束时,C++编译系统系统自动调用析构函数。

析构函数的存在能能够帮我们在函数生命周期结束时自动释放动态开辟的空间,有效地避免了空间泄露。
此外,若没有自行定义类的析构函数。那么编译器就会生成默认的析构函数,其对不同成员变量的处理参照默认构造函数对不同成员变量的处理。

不同生命周期的构造、析构函数的执行顺序

class A
{
public:A(){cout << "A()" << endl;}~A(){cout<< "~A()" << endl;}
};
class B
{
public:B(){cout << "B()" << endl;}~B(){cout << "~B()" << endl;}
};
class C
{
public:C(){cout << "C()" << endl;}~C(){cout << "~C()" << endl;}
};
class D
{
public:D(){cout << "D()" << endl;}~D(){cout << "~D()" << endl;}
};
int main()
{B b1;static C c1;D d1;return 0;
}
A a1;

在这里插入图片描述
根据上述代码的运行结果可知:

  1. 构造函数的执行顺序:首先是全局变量的构造函数,然后是主函数里的局部变量构造函数从上往下依次进行。
  2. 析构函数的执行顺序:先执行主函数里的局部变量的析构函数从下往上依次进行,然后执行静态区的析构函数,最后才是全局变量的析构函数。

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

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

相关文章

洛谷_P5143 攀爬者_python写法

P5143 攀爬者 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 知识点&#xff1a; Python lambda&#xff08;匿名函数&#xff09; | 菜鸟教程 (runoob.com) import mathn int(input()) data [] for i in range(n):l list(map(int,input().split()))data.append(l)data.so…

网络简略总结

目录 一、三次握手 四次挥手 1、三次握手:为了建立长链接进行交互即建立一个会话,使用http/https协议 2、四次挥手是一个断开连接释放服务器资源的过程 3、如果已经建立了连接,但是客户端突然出现故障了怎么办? 4、谁可以中断连接?客户端还是服务端还是都可以? 5、…

投资者必读:如何利用龙虎榜数据捕捉市场热点

1.什么是龙虎榜 股票龙虎榜是指每个交易日证券交易所公布的关于股市交易活动的排行榜。龙虎榜主要展示了当日买卖最活跃的股票、买卖双方的机构或个人&#xff0c;以及他们的买卖金额和数量。这些数据可以帮助投资者了解市场的热点股票、资金流向和市场情绪。 通常&#xff0c…

《量子十年》报告更新!IBM精研量子计算,助力行业优化转型

近日&#xff0c;IBM商业价值研究院&#xff08;IBM Institute for Business Value&#xff0c;简称IBV&#xff09;精心出版了一本引人入胜的报告&#xff0c;《量子十年》第四版。这不仅是一本值得一读的书籍&#xff0c;更是对当前行业发展状况的全面总结和重要补充。 这部由…

Maven项目如何导入依赖包

一、导入依赖包 导入mysql依赖包 第一步&#xff1a;登录Maven官网 Maven官网&#xff1a;https://mvnrepository.com/search?qmysql 第二步&#xff1a;点击MySql Connector Java 第三步&#xff1a;点击任意一个版本 第四步&#xff1a;将以下内容复制到pom.xml中 导入j…

概率论基础概念和在AI中的应用

基本概念 概率论是数学的一个分支&#xff0c;它专注于分析和理解随机现象。通过概率论&#xff0c;我们可以量化不确定性&#xff0c;预测事件发生的可能性&#xff0c;并对复杂系统进行建模和分析。以下是一些概率论的基本概念和原理&#xff1a; 概率的定义 经典定义&…

随笔-生老病死

周末两天也没有出门&#xff0c;帮着一个朋友做了些图&#xff08;就这两天忙不过来&#xff09;&#xff0c;挣了点外快&#xff08;700&#xff09;&#xff0c;累得腰酸、眼花、脖子疼。 媳妇带着小孩出去玩&#xff0c;中间发了个视频&#xff0c;是小孩进了一个围棋培训班…

腾讯云k8s容器服务

1、新建一个集群 这个网址&#xff1a; 登录登录 - 腾讯云 2、选择第一个 3、名字随便起一个&#xff0c;然后基本默认就行 4、 组件配置直接跳过&#xff0c;信息确认&#xff0c;等待集群初始化&#xff0c;等10分钟左右&#xff08;容器服务需要充点钱才行&#xff09; 5…

【考研数学】武忠祥全年各阶段搭配用书汇总

如果选武忠祥&#xff0c;讲义方面选择基础篇和辅导讲义即可。分别在基础阶段和强化阶段使用。 此外复习全书不用买&#xff08;无论是基础篇还是提高篇都不用&#xff09;你以后可能会看到它的各种推广&#xff0c;不要轻信&#xff0c;有讲义的情况下全书很难利用得上。 武…

MATLAB学习笔记(二)PDE求解偏微分方程组

一、利用PDE求解偏微分方程组 初值为&#xff1a; 针对上述方程组&#xff0c;利用matlab自带工具箱和函数PDE进行求解。 以下是matlab中对工具箱中pdepe函数的解释。 二、matlab编程 在matlab中编程&#xff0c;利用PDE函数求解以上偏微分方程。 clc; clear; syms y global …

面试六分钟,难题显真章

职场&#xff0c;这个充满机遇与挑战的舞台&#xff0c;总会在不经意间上演着意想不到的转折。我从一家小公司转投到另一家&#xff0c;原本期待着新的工作环境和更多的发展机会&#xff0c;然而现实却给了我一个不小的打击。 新公司的加班文化&#xff0c;如同一个巨大的漩涡…

使用Vuex构建网络打靶成绩管理系统及其测试页面平台思路

使用Vuex构建网络打靶成绩管理系统及其测试页面平台 一、引言 在现代Web开发中&#xff0c;前端框架和状态管理库已经成为构建复杂应用的关键工具。Vue.js作为一个轻量级且易于上手的前端框架&#xff0c;结合Vuex这个专门为Vue.js设计的状态管理库&#xff0c;可以让我们更加…

es 集群安全认证

参考文档&#xff1a;Configure security for the Elastic Stack | Elasticsearch Guide [7.17] | Elastic ES敏感信息泄露的原因 Elasticsearch在默认安装后&#xff0c;不提供任何形式的安全防护不合理的配置导致公网可以访问ES集群。比如在elasticsearch.yml文件中,server…

Centos虚拟机忘记密码;重置虚机密码

虚拟机是一个好用的工具&#xff0c;在本地搭建的虚拟机可以给我们提供测试&#xff0c;但时间长了也会忘记密码&#xff1b;因此这里以centos系统的虚机为例&#xff0c;提供一个重置虚机密码的方法 1.在开机页面按“E”进入编辑模式 进入后长这样&#xff1a; 2.找到ro cras…

设计模式学习笔记 - 设计模式与范式 - 创建型:1.单例模式(上):为什么说支持懒加载的双重校验不必饿汉式更优?

今天开始正式学习设计模式。经典的设计模式有 23 种。其中&#xff0c;常用的并不是很多&#xff0c;可能一半都不到。作为程序员&#xff0c;最熟悉的设计模式&#xff0c;肯定包含单例模式。 本次单例模式的讲解&#xff0c;希望你搞清楚下面这样几个问题。&#xff08;第一…

氮化镓特性简述

氮化镓 了解和记录一下氮化镓材料的特性。 结构 使用pymatgen和Materials Project中的材料数据绘制能带图。其中mp-804(1.73eV)如下所示&#xff1a; 以及mp-830(1.57eV)如下所示&#xff1a; python代码如下 # from pymatgen.ext.matproj import MPRester from mp_api.…

mac安装mongoDB数据库

1.进入MongoDB官网进行下载 MongoDB官网 2.下载完毕并且解压&#xff0c;重新命名为 【mongodb】文件夹 3.打开访达 按住快捷键commandshiftg 前往/usr/local路径 4.将解压并命名好的【mongodb】文件夹拖入到这个路径下 5.配置环境变量&#xff0c;在根目录输入open -e .zshrc…

【Linux】详谈进程优先级进程调度与切换

一、进程优先级 1.1、为什么要有优先级 进程要访问某种资源&#xff0c;进程通过一定的方式排队&#xff0c;确认享受资源的优先顺序。计算机中资源过少&#xff0c;所以进程访问某种资源时需要排队。 1.2、优先级的具体表示 进程的优先级其实就是PCB中的一个整形变量…

知识学习app

管理端&#xff1a; &#xff08;1&#xff09;登录 &#xff08;2&#xff09;首页数据报表&#xff1a;1.数据概括2.一周数据走势 &#xff08;3&#xff09;内容管理&#xff1a; 1.分类管理&#xff1a;新增&#xff0c;修改&#xff0c;删除&#xff0c;排序 2.八股文&…

Vue.js+SpringBoot开发学校热点新闻推送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…