《C++个人学习笔记》复制构造函数

复制构造函数是C++中创建相同对象的方式之一,通过已存在的对象初始化新对象。它接收一个本类对象的引用作为参数,实现对象的复制。复制构造函数与普通构造函数相似,但用于克隆已有对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成两个完全相同的对象有两种方法,第一种就是将已有的对象的数据成员(member或称属性)取出来,一一赋值给新的对象。第二种方法就是使用复制构造函数,让类具有自行复制本类对象的能力。

 复制构造函数:具有一般构造函数的所有特性,形参是本类的对象的引用。作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。

个人理解:构造函数是用于创建一个类的新的对象。而复制构造函数就是复制一个已经存在的对象。(构造函数创建一个新的人,复制构造函数就是创建一个克隆人)。

#include<iostream>
using namespace std;
/*复制构造函数*/
//时钟类 
class Clock{
	public:
		Clock(){  //无参构造函数实现-内联 
			hour=0;
			minute=0;
		}
		Clock(int newH,int newM){//构造函数
			hour=newH;  //在类里的 函数中写了内容(即函数实现),就属于隐式内联函数 
			minute=newM; 
		}
		Clock(Clock &c);//复制构造函数,类名(类名 &对象名); 
		int getH(){return hour;} //与上方 同理属于内联函数 
		int getM(){return minute;}
	private:
		int hour,minute;
}; 
//成员函数实现 
Clock::Clock(Clock &c){//复制构造函数的实现
//没有在类中实现函数,也没有显示声明inline,所以不是内联函数 
	hour=c.hour;
	minute=c.minute;
	cout<<"调用了构造函数的复制copy"<<endl;	
} 
//形参为Clock类的对象函数 
void showNewClock(Clock c){ //如果函数的形参是类的对象,调用函数时,进行形参和实参的结合。 
	cout<<"该函数调用了复制构造函数newClock H: "<<c.getH()<<endl;
	cout<<"该函数调用了复制构造函数newClock M: "<<c.getM()<<endl;
}
//返回值为Clock类对象的函数
Clock clockFunction(){ 
	Clock c(1,2);//这里创建了一个Clock的对象 
	return c; //函数返回了刚刚创建的对象c, 
} 
int main(){
	Clock myClock(0,1);
	Clock newMyClock(myClock);//用对象myClock初始化对象NewMyClock,复制函数被调用 
	//Clock newMyClock=myClock;//第二种方法,用对象myClock初始化对象NewMyClock,复制函数被调用
	cout<<"myClock :  "<<myClock.getH()<<"  "<<myClock.getM()<<endl;
	cout<<"newMyClock :  "<<newMyClock.getH()<<"  "<<newMyClock.getM()<<endl;	

	showNewClock(myClock); //函数的形参是类的对象,会调用复制构造函数 
	
	Clock testFunctionClock; 
	testFunctionClock=clockFunction();
	cout<<"testFunctionClock :  "<<testFunctionClock.getH()<<"  "<<testFunctionClock.getM()<<endl;	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值