- #include
- using namespace std;
- class CPU {
- public:
- //抽象计算函数
- virtual void calculate() = 0;
-
- };
-
- class CVideoCard {
- public:
- //抽象显示函数
- virtual void display() = 0;
-
- };
- class Memory {
- public:
- //抽象存储函数
- virtual void storage() = 0;
-
- };
-
- class Computer {
- public:
-
- Computer(CPU* cpu, CVideoCard* vc, Memory* mem) {
- m_cpu = cpu;
- m_vc = vc;
- m_mem = mem;
- }
- //提供工作函数
- void doWork() {
- 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;//CPU的零件指针
- CVideoCard* m_vc;//显卡的零件指针
- Memory* m_mem;//内存条的零件指针
-
-
- };
-
- class IntelCPU : public CPU
- {
- virtual void calculate()
- {
- cout << "Intel CPU 正在计算" << endl;
- }
- };
-
- class IntelVideoCard : public CVideoCard
- {
- virtual void display()
- {
- cout << "Intel 显卡正在显示" << endl;
- }
-
- };
-
- class IntelMemory : public Memory
- {
- virtual void storage()
- {
- cout << "Intel 内存条正在存储" << endl;
- }
-
- };
-
-
- class AmdCPU : public CPU
- {
- virtual void calculate()
- {
- cout << "Amd CPU 正在计算" << endl;
- }
- };
-
- class AmdVideoCard : public CVideoCard {
- virtual void display() {
- cout << "Amd 显卡正在显示" << endl;
- }
- };
-
-
- class AmdMemory : public Memory {
- virtual void storage() {
- cout << "Amd 内存条正在存储" << endl;
- }
- };
-
-
- void test01() {
- CPU* Intelcpu = new IntelCPU();
- CVideoCard* Intelvc = new IntelVideoCard();
- Memory* Intelmem = new IntelMemory();
-
- //组装第一台电脑
-
- Computer* c1 = new Computer(Intelcpu, Intelvc, Intelmem);
- c1->doWork();
- delete c1;
-
- cout << "----------------------" << endl;
- //组装第二台电脑
- CPU* Amdcpu = new AmdCPU();
- CVideoCard* Amdvc = new AmdVideoCard();
- Memory* Amdmem = new AmdMemory();
-
- Computer* c2 = new Computer(Amdcpu, Amdvc, Amdmem);
- c2->doWork();
- delete c2;
-
-
- }
-
- int main() {
- test01();
- return 0;
- }
- class CPU {
- public:
- //抽象计算函数
- virtual void calculate() = 0;
-
- };
-
- class CVideoCard {
- public:
- //抽象显示函数
- virtual void display() = 0;
-
- };
- class Memory {
- public:
- //抽象存储函数
- virtual void storage() = 0;
-
- };
在这里用了组装电脑中比较重要的零件分别是CPU(处理器)Cvideocard(显卡)Memory(内存条)分别创建了3个类。
在每个类中都用到纯虚函数方便子类后续进行继承
纯虚函数是为了实现接口或抽象基类而设计的,强制派生类必须重写该函数。
- class Computer {
- public:
-
- Computer(CPU* cpu, CVideoCard* vc, Memory* mem) {
- m_cpu = cpu;
- m_vc = vc;
- m_mem = mem;
- }
- //提供工作函数
- void doWork() {
- 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;//CPU的零件指针
- CVideoCard* m_vc;//显卡的零件指针
- Memory* m_mem;//内存条的零件指针
-
-
- };
首先要在Computer类中创建3个零件的指针去接收传入的零件指针
- private:
- CPU* m_cpu;//CPU的零件指针
- CVideoCard* m_vc;//显卡的零件指针
- Memory* m_mem;//内存条的零件指针
这里之所以用private(保护权限)是因为编程习惯,通常在一个类中存放变量的权限用private(保护权限)防止随意被更改。
- Computer(CPU* cpu, CVideoCard* vc, Memory* mem) {
- m_cpu = cpu;
- m_vc = vc;
- m_mem = mem;
- }
创建一个构造函数用来接受传入的CPU(处理器)、VideoCard(显卡) 以及 Memory(硬盘)的参数。
- //提供工作函数
- void doWork() {
- m_cpu->calculate();
- m_vc->display();
- m_mem->storage();
- }
创建一个工作函数(doWork),该函数主要功能是提示每个零件是否正常工作。在该函数中要调用每个零件的功能,列如在Cpu类中我们创建了一个calculate(计算)函数,那么我们就要在doWork函数中调用该功能。
- class CPU {
- public:
- //抽象计算函数
- virtual void calculate() = 0;
-
- };
- //析构函数
- ~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;
- }
-
- }
首先要知道为什么要创建析构函数,因为我们创建了3个指针变量,而指针变量一般是存放在内存里的堆区里,在堆区中系统不会自动释放该内存,这就导致会很容易出现内存泄漏的情况,所以我要进行手动的释放内存。
-
- class IntelCPU : public CPU
- {
- virtual void calculate()
- {
- cout << "Intel CPU 正在计算" << endl;
- }
- };
-
- class IntelVideoCard : public CVideoCard
- {
- virtual void display()
- {
- cout << "Intel 显卡正在显示" << endl;
- }
-
- };
-
- class IntelMemory : public Memory
- {
- virtual void storage()
- {
- cout << "Intel 内存条正在存储" << endl;
- }
-
- };
-
-
- class AmdCPU : public CPU
- {
- virtual void calculate()
- {
- cout << "Amd CPU 正在计算" << endl;
- }
- };
-
- class AmdVideoCard : public CVideoCard {
- virtual void display() {
- cout << "Amd 显卡正在显示" << endl;
- }
- };
-
-
- class AmdMemory : public Memory {
- virtual void storage() {
- cout << "Amd 内存条正在存储" << endl;
- }
- };
-
- class IntelCPU : public CPU
- {
- virtual void calculate()
- {
- cout << "Intel CPU 正在计算" << endl;
- }
- };
例如我们要创建一个inter系列的cpu,那首先创建一个类名为 InrelCPU
因为他是CPU类中的一个子类,所以要继承CPU类中的属性,也就是
class intelCPU : public CPU
因为在CPU类中我们创建了一个关于calculate(计算)的虚函数
-
- class IntelCPU : public CPU
- {
- virtual void calculate()
- {
- cout << "Intel CPU 正在计算" << endl;
- }
- };
因此子类也要使用这个虚函数,并给这个虚函数重载一下,所以代码为:
virtual void calculate()
{
cout << "Intel CPU 正在计算" << endl;
}
-
- void test01() {
- CPU* Intelcpu = new IntelCPU();
- CVideoCard* Intelvc = new IntelVideoCard();
- Memory* Intelmem = new IntelMemory();
-
- //组装第一台电脑
-
- Computer* c1 = new Computer(Intelcpu, Intelvc, Intelmem);
- c1->doWork();
- delete c1;
-
- cout << "----------------------" << endl;
- //组装第二台电脑
- CPU* Amdcpu = new AmdCPU();
- CVideoCard* Amdvc = new AmdVideoCard();
- Memory* Amdmem = new AmdMemory();
-
- Computer* c2 = new Computer(Amdcpu, Amdvc, Amdmem);
- c2->doWork();
- delete c2;
-
-
- }
如代码所示,首先创建一个test01函数用来测试。
- CPU* Intelcpu = new IntelCPU();
- CVideoCard* Intelvc = new IntelVideoCard();
- Memory* Intelmem = new IntelMemory();
在这段代码中,CPU* Intelcpu = new IntelCPU();
CVideoCard* Intelvc = new IntelVideoCard();
以及Memory* Intelmem = new IntelMemory();
这些语句分别创建了 IntelCPU
、IntelVideoCard
和 IntelMemory
类的对象,并将它们的指针赋值给了 Intelcpu
、Intelvc
和 Intelmem
指针变量。
这些对象的创建和赋值是为了模拟组装一台计算机所需的不同零件,其中 IntelCPU
代表 Intel 品牌的 CPU,IntelVideoCard
代表 Intel 品牌的显卡,IntelMemory
代表 Intel 品牌的内存条。
类似地,后续代码中的 AmdCPU
、AmdVideoCard
和 AmdMemory
分别代表 AMD 品牌的 CPU、显卡和内存条。通过这种方式,你可以轻松地组装出不同品牌的计算机,并测试它们的工作状态。
-
- Computer* c1 = new Computer(Intelcpu, Intelvc, Intelmem);
- c1->doWork();
- delete c1;
创建一个电脑类的对象名为 c1 将上文创建好的3个品牌零件赋值给c1。
赋值完成后调用c1中的doWork函数来检查电脑各零件是否在工作状态中。
最后创建完成电脑后记得释放内存
delete c1;