C++:类对象作为类成员

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

class Game
{
	public:
		// explicit:防止利用隐式类型转换方式来构造对象。
		explicit Game(string iname)
		{
			name = iname;
			cout<<"Game::Game(string iname)"<<endl;
		}
		
		~Game()
		{
			cout<<"Game::~Game()"<<endl;
		}
		
		string getname()
		{
			return name;
		}
		
	private:
		string name;
};

class Phone
{
	public:
		Phone(string iname)
		{
			name = iname;
			cout<<"Phone::Phone(string iname)"<<endl;
		}
		
		~Phone()
		{
			cout<<"Phone::~Phone()"<<endl;
		}
		
		string getname()
		{
			return name;
		}
		
	private:
		string name;
};

class Person
{
	public:
		// 其他类对象作为本类成员,先构造其他类对象,再构造自身,析构与构造相反。
		Person(string iname, string pname, string gname):name(iname), phone(pname), game(gname)
		{
			cout<<"Person::Person(string iname, string pname, string gname)"<<endl;
		}
		
		~Person()
		{
			cout<<"Person::~Person()"<<endl;
		}
		
		void playGame()
		{
			cout<<name<<"正在用"<<phone.getname()<<"玩"<<game.getname()<<endl;
		}
		
	private:
		string name;
		Phone phone;
		Game game;
};

// 一个类对象作为另一个类的成员
void test01()
{
	Person p("李四", "iphone7 plus", "王者荣耀");
	p.playGame();
}

// 类的调用方式
void test02()
{
	Game g1("王者荣耀"); // 括号法调用
	Phone p1 = Phone("iphone"); // 显示法调用
	//Phone p2 = "123";
	Phone("Apple"); // 匿名对象 - 当前行执行后,编译器立即回收匿名对象
	// 注意:不要利用拷贝构造函数初始化匿名对象
	// Phone(p1); // Phone(p1); <=> Phone p1;
	
	// 隐式调用法,避免该调用方法,可在有参构造函数前加explicit关键字来防止
	Phone p = "xiaomi"; 
}

int main()
{
	//test01();
	test02();
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值