Effective C++ 12代码

#include <iostream>
#include <string>
using namespace std;

class Phone
{
public:
	Phone(string name);
	virtual ~Phone(){cout<<"Phone destory"<<endl;}
	virtual void print();
	string GetName(){return m_name;}
private:
	string m_name;
};
Phone::Phone(string name)
: m_name(name)
{
	cout<<"Phone create"<<endl;
}
void Phone::print()
{
	cout<<"phone name:"<<m_name<<endl;
}

class Iphone:public Phone
{
public:
	Iphone(string name, bool IsSiri = 1);
	~Iphone();
	Iphone(const Iphone& rhs);
	Iphone& operator=(const Iphone& rhs);
	virtual void print();
private:
	bool m_bIsSiri;
};
Iphone::Iphone(string name, bool IsSiri)
:Phone(name)
, m_bIsSiri(IsSiri)
{
	cout<<GetName() + " create"<<endl;
}
Iphone::Iphone(const Iphone& rhs)
:Phone(rhs)	//base的copy 函数
{
	cout<< "copy func"<<endl;
	m_bIsSiri = rhs.m_bIsSiri;
}
Iphone& Iphone::operator=(const Iphone& rhs)
{
	cout<< "operator= func"<<endl;
	Phone::operator=(rhs);	//base的赋值操作
	m_bIsSiri = rhs.m_bIsSiri;
	return *this;
}
Iphone::~Iphone()
{
	cout<<GetName() + " destory"<<endl;
}
void Iphone::print()
{
	cout<<"i am"<<" " + GetName();
	if (m_bIsSiri)
	{
		cout<<" and i have siri"<<endl;
	}
	else
	{
		cout<<" and i have not siri"<<endl;
	}
}
int main()
{
	Phone* pPhone = new Iphone("iphone");
	pPhone->print();
	delete pPhone;
	
	pPhone = new Iphone("HTC", 0);
	pPhone->print();
	delete pPhone;
	pPhone = NULL;

	Iphone iphone("iphone");
	Iphone HTC("HTC");
	HTC = iphone;//operator=
	HTC.print();
	Iphone samsung(HTC);//copy构造函数
	samsung.print();
	return 1;
}

  

posted @ 2014-09-15 11:19  2012harry  阅读(159)  评论(0编辑  收藏  举报