构造函数分类以及调用

2023-11-18

构造函数语法:
类名()
{

}

1>. 构造函数,没有返回值也不写void。
2>. 函数名称与类名相同。
3>. 构造函数可以有参数的,因此是可以发生函数重载。
4>. 程序在调用对象时,会自动调用构造函数,无须手动调用,而且只会调用一次

析构函数语法:
~类名()
{

}

1>. 析构函数,没有返回值也不写void。
2>. 函数名称与类名相同,在名称前面加上~符号即可。
3>. 析构函数不可以有参数,因此不可以发生函数重载。
4>. 程序在对象销毁前会自动调用析构函数,无须手动调用,而且只会调用一次

构造函数两种分类方式:
按参数分为:有参构造与无参构造。
按类型分为:普通构造与拷贝构造。

三种调用方式:
括号法。
显示法。
隐式转换法。

#include <iostream>
using namespace std;

/*
两种分类方式:
按参数分为:有参构造与无参构造。
按类型分为:普通构造与拷贝构造。

三种调用方式:
括号法。
显示法。
隐式转换法。
*/

class Person{
public:
	//普通无参构造函数  --> 无参构造(默认构造)
	Person()
	{
		cout << "Person 无参构造函数调用" << endl;
	}

	//普通有参构造函数  --> 有参构造,一般就是用于初始化属性的值
	Person(int age)
	{
		m_Age = age;
		cout << "Person 有参构造函数调用" << endl;
	}

	//拷贝构造函数
	Person(const Person& p)  //将传入的参数p的所有属性拷贝到自己身上。
	{
		m_Age = p.m_Age;
		cout << "Person拷贝构造函数的调用" << endl;
	}

	~Person()
	{
		cout << "Person析构函数调用" << endl;
	}

	int m_Age;
};

int main(int argc,char *argv[])
{
	//1. 括号法。(最常用)
	//Person p1;     //调用无参构造函数
	//Person p2(10); //调用有参构造函数
	//Person p3(p2); //调用拷贝构造函数

	//注意事项:
	//调用默认构造函数时,记住不要加()
	//因为以下这行代码,编译器会认为是一个函数的声明,不是在创建对象。
	//Person p1();

	//cout << "p2的年龄:" << p2.m_Age << endl;
	//cout << "p3的年龄:" << p3.m_Age << endl;
	
	//2. 显示法。
	//Person p1;               //调用无参构造函数
	//Person p2 = Person(10);  //调用有参构造函数
	//Person p3 = Person(p2);  //调用拷贝构造函数

	//Person(10);   //这也是一个对象,只是没有名字而已。
				 //系统创建了这个名字的对象之后,赋值给Person p2
				 //这个对象就有名字,叫p2。
				 
				 //匿名对象特点:当前行执行结束之后,系统会立即回收掉匿名对象
	
	//cout << "aaa" << endl;
	//cout << "aaa" << endl; 
	//cout << "aaa" << endl;
	//cout << "aaa" << endl;
	//cout << "aaa" << endl;

	//cout << "p2的年龄:" << p2.m_Age << endl;
	//cout << "p3的年龄:" << p3.m_Age << endl;
	
	//3. 隐式转换法。
	Person p1;      //调用无参构造函数
	Person p2 = 10; //调用有参构造函数
	Person p3 = p2; //调用拷贝构造函数
	
	cout << "p2的年龄:" << p2.m_Age << endl;
	cout << "p3的年龄:" << p3.m_Age << endl;

	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构造函数分类以及调用 的相关文章

随机推荐

  • 语音增强技术

    我的书 淘宝购买链接 当当购买链接 京东购买链接 在人机交互的场景中 麦克风采集到的人声不可避免的混杂外界噪声 可以通过信号处理的方法在处理前将其去除 以获得 纯净 的语音信号 这一过程称为降噪或者语音增强 从麦克风数量上分为单麦克降噪 多
  • C++程序员视角下的Rust语言

    自上世纪80年代初问世以来 C 就是一门非常重要的系统级编程语言 到目前为止 仍然在很多注重性能 实时性 偏硬件等领域发挥着重要的作用 C 和C一样 可以通过指针直接操作内存 这给了程序员的编程提供了相当大的自由度 但指针就是一把双刃剑 给
  • Spring控制反转和依赖注入的好处

    要了解控制反转 Inversion of Control 我觉得有必要先了解软件设计的一个重要思想 依赖倒置原则 Dependency Inversion Principle 什么是依赖倒置原则 假设我们设计一辆汽车 先设计轮子 然后根据轮
  • Leetcode刷题316. 去除重复字母

    给你一个字符串 s 请你去除字符串中重复的字母 使得每个字母只出现一次 需保证 返回结果的字典序最小 要求不能打乱其他字符的相对位置 注意 该题与 1081 https leetcode cn com problems smallest s
  • 1144. 递减元素使数组呈锯齿状

    1144 递减元素使数组呈锯齿状 题目描述 给你一个整数数组 nums 每次 操作 会从中选择一个元素并 将该元素的值减少 1 如果符合下列情况之一 则数组 A 就是 锯齿数组 每个偶数索引对应的元素都大于相邻的元素 即 A 0 gt A
  • 巧用Maya轴心操作技巧,让工作事半功倍!

    Maya 是一款专业的三维软件 可以用于创建规模宏大的世界 复杂的角色和炫酷的特效 Maya的用户遍布动画行业 影视特效 广告和片头 平面设计行业 用户数量十分庞大 本文分享了maya轴心操作的小技巧 让设计师工作事半功倍 一起来看看吧 一
  • EOFError: end of file reached

    logstash config email have error 2018 06 13T18 26 21 299 ERROR logstash outputs email Something happen while delivering
  • C/C++语言中字符串多行书写方法

    在C C 语言中 可能我们要书写的一个字符串太长了 放在一行上影响代码的可读性 这时我们就需要多行书写了 字符串多行书写有两种方法 在字符串换行处加一个反斜杠 下一行前不能有空格或者Tab键 使用双引号 程序示例 01 02 Introdu
  • Python求解,汉诺塔问题(附原代码和注释)

    def hanoi n a b c if n 1 print a gt c 最终目标是把A处移到C处 else hanoi n 1 a c b 把A处上层的n 1个移动到B处 此时A处即为A处 B处即为目标终点C hanoi 1 a b c
  • 性能测试工具 Locust

    目录 1 Locust的特点 2 脚本编写 class HttpLocust Locust class TaskSet 发出 HTTP 请求 使用 HTTP client 手动控制请求是成功还是失败 3 脚本增强 关联 参数化 检查点 断言
  • Android HAL 层框架分析(一)

    作为一个搞android驱动或者说搞底层的人 我觉得对于hal那是必须要掌握的 而且必须达到一定深度 于是我总结了一下 将整个自己的分析思路写下来 主要是看android源代码 根据源代码得到的思路 看源代码比看什么著作书籍都管用 andr
  • 封装

    1 生活中封装 快递 外卖 电脑机箱 2 java中封装 隐藏类内部的细节 对外部提供一些访问细节的方法 3 封装例子 方法 类 属性 4 封装好处 提高代码复用性 提高代码安全性 提高代码易用性 5 实现步骤 1 隐藏内部细节 属性 2
  • 网站服务器地址url怎么查看,怎么查看服务器访问外部的url地址

    怎么查看服务器访问外部的url地址 内容精选 换一换 在云服务器上搭建网站后 部分客户通过本地网络访问网站时出现偶发性无法访问的情况 确认客户使用的本地网络 若客户的本地网络是NAT网络 本地主机通过NAT功能使用公网IP地址访问弹性云服务
  • Python的列表和元组

    Python 列表 list 1 序列介绍 序列是Python中最基本的数据结构 序列中的每个元素都分配一个数字 它的位置 或索引 第一个索引是0 第二个索引是1 依此类推 Python有6个序列的内置类型 但最常见的是列表和元组 序列都可
  • pitaya框架中etcd实现服务发现源码注释

    package cluster import context encoding json fmt strings sync time github com coreos etcd clientv3 github com coreos etc
  • StaggeredGridLayoutManager与GridLayoutManager小细节注意点

    一 StaggeredGridLayoutManager 1 当我们的设置为VERTICAL时 很容易发现当上一行的高度排放相等时它一行排放的先后顺序是从左到右 2 当我们的设置为HORIZONTAL时 它总是从上到下排放的 3 当我们的设
  • opencv的安装、配置及所遇问题(Ubuntu16.04 + OpenCV3.4.2 + Python3.6)

    安装opencv对好多首次安装的开发者来说都是一场勇气和运气的较量 同样也是我在安装Ubuntu下安装过的众多软件包中最为波折的一款 在此记录安装过程中出现的各种error 幸运女神眷顾的安装顺序 1 安装ubuntu下的依赖项 sudo
  • 《Ansible自动化工具篇:Centos操作系统基于ansible工具一键远程离线部署之K8S1.24.12二进制版集群》

    一 部署背景 由于业务系统的特殊性 我们需要针对不同的客户环境部署二进制版K8S集群 由于大都数用户都是专网环境 无法使用外网 为了更便捷 高效的部署 针对业务系统的特性 我这边编写了 基于ansible自动化工具一键远程离线部署进制版K8
  • 办公利器:用Python向钉钉发送消息

    钉钉作为目前最热门的办公软件 在工作中大多数时间都在与他打交道 今天和大家分享一下如何用Python向钉钉发送消息 最终达到每日自动向指定群中发送销售日报 新建群机器人 首先打开群设置 点击智能群助手 选择添加自定义机器人 然后根据提示添加
  • 构造函数分类以及调用

    构造函数语法 类名 1 gt 构造函数 没有返回值也不写void 2 gt 函数名称与类名相同 3 gt 构造函数可以有参数的 因此是可以发生函数重载 4 gt 程序在调用对象时 会自动调用构造函数 无须手动调用 而且只会调用一次 析构函数