C++笔记--类和对象--训练案例

目录

1.电脑组装——分析

2.电脑组装——具体实现


        组成零件:CPU(计算功能)、显卡(ViedoCard)(显示功能)、内存条(Memory)(储

存功能)

        零件成产厂商:英特尔(Inter)、联想(Lenovo)

        组装两台不同厂商的电脑。

1.电脑组装——分析

       组成零件可以抽象成三个类,电脑本身也可以抽象成一个类

class CPU
{
public:
	virtual void calculate() = 0;
};
//显卡
class ViedoCard
{
public:
	virtual void display() = 0;
};
//内存
class Memory
{
public:
	virtual void storage() = 0;
};
//电脑
class Computer
{
    //功能实现
};

        绝大多数对象,都可抽象成类,尤其是,当一类东西需要调用其不同的形式时,使用类是很好的选择,然后,让所需的不同形式去继承这些基类,简化代码的同时,结构清晰。

        

//英特尔CPU ,类比书写其他零件
class InterCPU:public CPU
{
public:
	void calculate()
	{
		英特尔CPU开始工作
	}
};

        在电脑类中,我们需要在构造函数中传三个零件,并提供一个工作(调用三个零件的功能)的函数。接下来看看具体的代码。

2.电脑组装——具体实现

//CPU
class CPU
{
public:
    //纯虚函数
    //计算功能
	virtual void calculate() = 0;
};
//显卡
class ViedoCard
{
public:
    //显示功能
	virtual void display() = 0;
};
//内存
class Memory
{
public:
    //储存功能
	virtual void storage() = 0;
};
//电脑
class Computer
{
public:    
    //在构造函数中传入所需零件,通常传入的是堆区数据,在本类中,用相应的属性进行接收
	Computer(CPU* cpu, ViedoCard* vc, Memory* mem)
	{
		m_cpu = cpu;
		m_vc = vc;
		m_mem = mem;
	}
    //实现功能
	void work()
	{
		m_cpu->calculate();
		m_vc->display();
		m_mem->storage();
	}
    //对堆区数据进行释放
	~Computer()
	{
		if (m_cpu != NULL)
		{
			delete m_cpu;
			m_cpu = NULL;
		}
		if (m_vc != NULL)
		{
			delete m_vc;
			m_vc = NULL;
		}
		if (m_mem != NULL)
		{
			delete m_mem;
			m_mem = NULL;
		}
	}
private:
	//接收其他类的属性
	CPU* m_cpu;
	ViedoCard* m_vc;
	Memory* m_mem;
};
//英特尔CPU
class InterCPU:public CPU
{
public:
	void calculate()
	{
		cout << "英特尔CPU开始工作" << endl;
	}
};
//英特尔显卡
class InterVC :public ViedoCard
{
public:
	void display()
	{
		cout << "英特尔显卡开始工作" << endl;
	}
};
//英特尔内存条
class InterM :public Memory
{
public:
	void storage()
	{
		cout << "英特尔内存开始工作" << endl;
	}
};
//联想CPU
class LenovoCPU :public CPU
{
public:
	void calculate()
	{
		cout << "联想CPU开始工作" << endl;
	}
};
//联想显卡
class LenovoVC :public ViedoCard
{
public:
	void display()
	{
		cout << "联想显卡开始工作" << endl;
	}
};
//联想内存条
class LenovoM :public Memory
{
public:
	void storage()
	{
		cout << "联想内存开始工作" << endl;
	}
};
void text01()
{
    //抽象类不能实例化对象,但可以定义一个指向该类的指针
	CPU* interCpu = new InterCPU();
	ViedoCard* interVc = new InterVC();
	Memory* interM = new InterM();

	//英特尔电脑
	Computer* computer1 = new Computer(interCpu, interVc, interM);
	computer1->work();
	delete computer1;

    //Lenovo电脑同上
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值