解释图:
①抽象出每个零件的类 【需要加public】犯错
class CPU {
public:
virtual void calculate() = 0;
};
class VideoCard {
public:
virtual void display() = 0;
};
class Memory {
public:
virtual void storage() = 0;
};
②组装电脑进行工作
//电脑类
class Computer {
//构造函数中传入三个零件指针
//提供工作的函数-调用每个零件工作的接口
};
③具体零件厂商
class Inter :public CPU {
virtual void calculate() {
cout << "Inter的CPU开始计算了!" << endl;
}
};
class Inter :public VideoCard {
virtual void calculate() {
cout << "Inter的VideoCard开始运行了!" << endl;
}
};
class Inter :public Memory {
virtual void calculate() {
cout << "Inter的Memory开始读取了!" << endl;
}
};
//Lenovo零件厂商
class Lenovo :public CPU {
virtual void calculate() {
cout << "Inter的CPU开始计算了!" << endl;
}
};
class Lenovo :public VideoCard {
virtual void calculate() {
cout << "Inter的VideoCard开始运行了!" << endl;
}
};
class Lenovo :public Memory {
virtual void calculate() {
cout << "Inter的Memory开始读取了!" << endl;
}
};
④测试阶段-组装三台不同的电脑
void test01() {
CPU* c1 = new InterCPU;
VideoCard* vc1 = new LenovoVidoeCard;
Memory* m1 = new LenovoMemory();//加不加()都可以,主要是*
Computer* com01 = new Computer(c1, vc1, m1); //传入指针的格式需要加*
com01->work();
delete com01;
}
完整代码:
#include <iostream>
using namespace std;
#include <string>
class CPU {
public: //需要加public
virtual void calculate() = 0;
};
class VideoCard {
public:
virtual void display() = 0;
};
class Memory {
public:
virtual void storage() = 0;
};
//电脑类
class Computer {
public:
//构造函数中传入三个零件指针
Computer(CPU *cpu,VideoCard *vc, Memory *mem) {//构造 指针
m_cpu = cpu;
m_vc = vc;
m_mem = mem;
}
//提供工作的函数-调用每个零件工作的接口
void work() {
m_cpu->calculate();
m_vc->display();
m_mem->storage();
}
private: //声明private
CPU* m_cpu;
VideoCard* m_vc;
Memory* m_mem;
};
//Inter零件厂商
class InterCPU :public CPU {
public:
virtual void calculate() {
cout << "Inter的CPU开始计算了!" << endl;
}
};
class InterVidoeCard :public VideoCard {
public:
virtual void display() {
cout << "Inter的显卡开始显示了!" << endl;
}
};
class InterMemory :public Memory {
public:
virtual void storage() {
cout << "Inter的内存条开始存储了!" << endl;
}
};
//Lenovo零件厂商
class LenovoCPU :public CPU {
public:
virtual void calculate() {
cout << "Lenovo的CPU开始计算了!" << endl;
}
};
class LenovoVidoeCard :public VideoCard {
public:
virtual void display() {
cout << "Lenovo的VideoCard开始运行了!" << endl;
}
};
class LenovoMemory :public Memory {
public:
virtual void storage() {
cout << "Lenovo的Memory开始读取了!" << endl;
}
};
//组装三台不同的电脑
void test01() {
CPU* c1 = new InterCPU;
VideoCard* vc1 = new LenovoVidoeCard;
Memory* m1 = new LenovoMemory();
Computer* com01 = new Computer(c1, vc1, m1); //传入指针的格式需要加*
com01->work();
delete com01;
}
int main() {
test01();
}
运行结果:
但是,零件是在堆区创建的。com01被delete释放了,但是零件还没有释放,所以在class Computer中加上:
//提供析构函数 释放3个电脑零件
~Computer() {
//释放CPU零件
if (m_cpu != NULL) {
delete m_cpu;
m_cpu = NULL;//一定大写NULL
}
//释放VC零件
if (m_vc != NULL) {
delete m_vc;
m_vc = NULL;//一定大写NULL
}
//释放Memory零件
if (m_mem != NULL) {
delete m_mem;
m_mem = NULL;//一定大写NULL
}
}