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;
}
相关推荐
逆小舟2 小时前
【Linux】人事档案——用户及组管理
linux·c++
再见晴天*_*3 小时前
SpringBoot 中单独一个类中运行main方法报错:找不到或无法加载主类
java·开发语言·intellij idea
lqjun08274 小时前
Qt程序单独运行报错问题
开发语言·qt
hdsoft_huge6 小时前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
风中的微尘6 小时前
39.网络流入门
开发语言·网络·c++·算法
未来之窗软件服务7 小时前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
混分巨兽龙某某7 小时前
基于Qt Creator的Serial Port串口调试助手项目(代码开源)
c++·qt creator·串口助手·serial port
小冯记录编程7 小时前
C++指针陷阱:高效背后的致命危险
开发语言·c++·visual studio
1uther7 小时前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎
C_Liu_8 小时前
C++:类和对象(下)
开发语言·c++