多态使用:
父类的指针或引用指向子类对象;
调用方式1.在函数调用中,通过父类指针指向子类:
//3、抽象电脑基类,提供工作函数;
class Computer
{
private:
CPU* m_CPU;
VideoCard* m_VideoCard;
Memory* m_Memory;
public:
Computer(CPU* CPU, VideoCard* VideoCard, Memory* Memory)
//相当于 CPU* CPU=new HuaweiCPU,VideoCard* VideoCard= new HuaweiVideoCard, Memory* Memory=new HuaweiMemory
{
m_CPU = CPU;
m_VideoCard = VideoCard;
m_Memory = Memory;
}
//电脑工作函数;
void Runing()
{
m_CPU->Calculate();
m_VideoCard->Display();
m_Memory->Storage();
}
};
int main()
{
//创建第一个电脑;
//调用方式1.在函数中,通过父类指针指向子类:
Computer c1(new HuaweiCPU, new HuaweiVideoCard, new HuaweiMemory);
//电脑运行;
c1.Runing();
system("pause");
return 0;
}
调用方式2.在函数调用中,通过父类引用指向子类:
void DoSpeak(Animal& animal)
//相当于:Animal& animal=cat;;此时多态发生,vfptr指向cat;
{
animal.Speak();
}
int main()
{
Animal animal;
DoSpeak(animal);
cat cat;
DoSpeak(cat);
system("pause");
return 0;
}
————————————————
版权声明:本文为CSDN博主「Bruce-嵌入式软件」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46432495/article/details/121845728
调用方式 3.在函数中,通过父类指针指向子类:
int main()
{
DoDrink* c = new Coffee;//这里直接发生多态,将vfptr指向coffee的vftal
c->DoWork();
delete c;
system("pause");
return 0;
}
调用方式4.在函数中,通过父类引用指向子类: