目录
组成零件: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电脑同上
}