C++ 24 之 拷贝构造函数

c24拷贝构造函数.cpp

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>   
using namespace std;

class Person3 {
private:
	int p_age;
public:
	// 构造函数分类:
	// 按参数分类:1、有参  2、无参
	// 按类型分类:普通、拷贝(复制)

	Person3() {
		cout << "默认构造函数" << endl;
	}
	// explicit 防止使用隐式方法来实现构造函数
	explicit Person3(int age) {
		p_age = age;
		cout << "有参数的构造函数" << p_age << endl;
	}

	// 拷贝构造函数
	// 不能使用值传递,用引用传递;
	// 需要添加const,因为不允许进行修改!
	Person3(const Person3 &p) {   
		p_age = p.p_age;
		cout << "拷贝构造函数" << p_age << endl;
	}

	~Person3() {
		cout << "析构函数" << endl;
	}

};

// 单独的一个方法
// 值传递本身就是拷贝一个副本再操作,所以会执行拷贝构造函数
void send_val(Person3 p) {

}



int main(void)
{
	// 调用方法:
	// 1、括号法
	Person3 p1;   // 调用的是默认构造函数
	Person3 p2(18);
	Person3 p3(p2);// 用一个对象初始化另一个对象 会调用拷贝构造函数

	cout << "--------" << endl;
	//Person3 p11();// 无参不能加小括号 不能直接调用无参构造函数,因为编译器把它当做函数声明
	
	// 2、显示法
	Person3 p4 = Person3();
	Person3 p5 = Person3(22);
	Person3 p6 = Person3(p5);

	cout << "--------" << endl;

	Person3(66); // 注意:1、匿名对象    执行完毕后,立即释放,立即执行析构函数
	cout << "66的后面" << endl;

	cout << "--------" << endl;

	//注意:2、不要用拷贝构造函数初始化匿名对象
	//Person3(p5); // Person3 p5; 当做对象的实例化看待,报错重定义

	//3、隐式法: 不推荐使用,因为可读性非常差。
	//Person3 p7 = 10;  // 相当于 Person3 p7 = Person3(10);
	//Person3 p8 = p7;// 相当于 Person3 p8 = Person3(p7);


	Person3 p9(29);
	// 值传递本身就是拷贝一个副本再操作,所以会执行拷贝构造函数
	send_val(p9); // 传了一个对象进去,同时触发了构造函数  p9也是值

	Person3 p10(18);
	Person3 p11(p10);
	return EXIT_SUCCESS;
}
相关推荐
ShineWinsu2 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
傲世仙尊3 小时前
多态-虚表才活到运行期符号表早已消失
c++
开开心心_Every3 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c3 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
是main不是漫3 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
吴卫斌3 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
·present·3 小时前
CSAPP(Bomb lab)
c语言·c++
王老师青少年编程3 小时前
2026年信奥赛c++普及组csp-j第二轮复赛真题
c++·真题·csp·信奥赛
超级架构师4 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
时间的拾荒人4 小时前
CMake 常用命令详解:从版本声明到安装部署
c++·面试