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;
}
相关推荐
淡海水7 分钟前
02-07-原理篇-GC暂停时间的本质
开发语言·unity·c#·gc·暂停时间
霍霍的袁12 分钟前
【C++】哈希表实现指南:从原理到开放定址法、链地址法的实现
c++·学习·哈希算法·散列表·visual studio
北i1 小时前
Dubbo 默认超时重试:把下游打雪崩的隐形放大器
开发语言·qt·dubbo
10mAh1 小时前
【Java】ArrayList 遍历删除为什么报错?三种写法与漏删复现
java·开发语言·windows
WL学习笔记1 小时前
类和对象(下)
c++·类和对象
wewowilling2 小时前
AI大模型开发--01Python基础(无废话)
开发语言·python·函数
小羊没烦恼!2 小时前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式
棉猴2 小时前
玩游戏学Python5-函数
开发语言·python·函数·玩游戏·游戏编程
傲世仙尊2 小时前
拷贝构造-传值传参的连锁反应与隐式函数的三个局限
c++
垆边人似月.2 小时前
华为机试题 :最大数
c++·算法·华为