C++ - 多态
动态多态需要满足的条件
-
有继承关系
-
子类要重写父类的虚函数(子函数重写的时候加不加virtual都可以)(加上virtual内存变为4个字节,指针的内存也是4个字节)
重写:函数的返回值类型、函数名、形参列表中所有内容需要相同
重载:函数名相同,参数不同
动态多态使用
父类的指针或引用指向子类对象
例子
#include<iostream>
using namespace std;
class Animal
{
public:
virtual void speak() // + virtual = 虚函数
{
cout<<"动物在说话!"<<endl;
}
};
class Cat:public Animal
{
public:
void speak() //Animal下的sprak函数加上virtual 这边加不加都可以
{
cout<<"小猫在说话!"<<endl;
}
};
void doSpeak(Animal &animal)
{
animal.speak(); //不加virtual 动物在说话!
// 把Animal下的sprak函数加上virtual ,输出:小猫在说话!
}
void test1()
{
Cat cat;
// cat.speak(); // 小猫在说话!
doSpeak(cat);
}
int main()
{
test1();
return 0;
}