【C++】3.6 对象的赋值和复制

  • 3.6 对象的赋值和复制

  • 3.6.1 对象赋值语句

【示例】

#include<iostream>
using namespace std;

class Myclass{
	public:
		void set(int i,int j){
			a=i;
			b=j; 
		} 
		void show(){
			cout<<"a = "<<" "<<"b = "<<b<<endl;
		}
	private:
		int a,b;
};

int main()
{
	Myclass obj1,obj2;
	
	obj1.set(10,20);
	obj1.show();
	
	obj2=obj1;
	obj2.show();
	return 0;
}

【示例运行结果】

【说明】

 (1)使用对象赋值语句进行对象赋值,两个对象的类型必须相同

(2)两个对象仍是分离

(3)对象赋值通过默认赋值运算符实现

(4)类中存在指针可能产生错误

  • 3.6.2 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,其形参是本类对象的引用 

【作用】在建立一个新对象,使用一个已经存在的对象去初始化这个新对象

【特点】

(1)拷贝构造函数是一种构造函数

(2)函数只有一个参数,并且是同类对象的引用

(3)每个类都必须有一个拷贝构造函数,可以自定义拷贝构造函数,或默认拷贝构造函数

1、自定义拷贝构造函数

【自定义拷贝构造函数形式】

类名::类名(const 类名 &函数名)
{
    //拷贝构造函数的函数体
}

【自定义拷贝构造函数示例】

#include<iostream>
using namespace std;

class Point{
	public:
		Point(int a,int b){
			x=a;
			y=b;
		}
		Point(const Point &p){
			x=2*p.x;
			y=2*p.y;
		}
		void print()
		{
			cout<<x<<" "<<y<<endl;
		}
	private:
		int x,y;
};

int main()
{
	Point p1(10,20);
	Point p2(p1);
	p1.print();
	p2.print();
	
	return 0;
}

【自定义拷贝构造函数示例运行结果】

2、默认拷贝构造函数

【默认拷贝构造函数示例】

#include<iostream>
using namespace std;

class Point{
	public:
		Point(int a,int b){
			x=a;
			y=b;
		}

		void print()
		{
			cout<<x<<" "<<y<<endl;
		}
	private:
		int x,y;
};

int main()
{
	Point p1(10,20);
	Point p2(p1);
	Point p3=p1; 
	p1.print();
	p2.print();
	p3.print(); 
	
	return 0;
}

【默认拷贝构造函数示例运行结果】

 

3、调用拷贝构造函数的3种情况

(1)当用类的一个对象去初始化该类的另一个对象时,拷贝构造函数将会调用

(2)当函数的形参是类的对象,在调用函数进行形参和实参结合时,拷贝构造函数将会被调用

(3)当函数的返回值是类的对象,在函数调用完毕将返回值(对象)带回函数调用处时 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值