拷贝构造函数

#include <iostream>
#include <string>

using namespace std;

class Person
{
public:
	Person(std::string st, int a, double ht) : name(st), age(a), height(ht)
	{
		cout << " normal constructor" << endl;
	}
	Person(const Person&p)
	{
		name = p.name;
		age = p.age;
		height = p.height;
		son = p.son;
		cout << " copy constructor " << endl;
	}
	void print()
	{
		std::cout << name << ", " << age << ", " << height << endl;
	}
	//private:
	std::string name;
	int age;
	double height;

	Person *son;
};

class HowMany
{
	static int objectCount;
public:
	HowMany() { objectCount++; }
	~HowMany() 
	{ 
		objectCount--; 
		cout << "~HowMany()" << endl; 
	}
	static void print(const string& msg = "")
	{
		if (msg.size() != 0)
			cout << msg << ": ";
		cout << objectCount << endl;
	}
};

int HowMany::objectCount = 0;

int main()
{
	HowMany m1;
	HowMany::print("xiao cui");
	HowMany m2;
	HowMany::print("ai ni");
	cout << endl << endl;

	Person p1("小崔",18,180);    // 输出是normal constructor
	p1.son = new Person("崔", 2,100);

	p1.print();

	p1.son->print(); 

	Person p2(p1); // 输出是 copy constructor
	p1.age = 20;
	p1.print(); // 输出的age = 20.
	p2.print(); // 输出的age = 18.

	p2.son->height = 105;
	p1.son->print();  // 输出的height 为105,
	p2.son->print();  // 输出的height 为105,

	Person p3 = p1;  // 输出是 copy constructor


	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值