概念:
多态是指一个接口,根据传入的参数不同,呈现多种多态,多态分为静态多态和动态多态。
静态多态:像函数重载和运算符重载属于静态多态,复用函数名。它的函数地址在编译阶段就已经确定了。
动态多态:通过派生类和虚函数实现运行时多态(有子类继承,子类重写父类虚函数),它的函数地址在运行时确定。
多态需要满足的条件:1、子类继承父类 2、子类重写父类中的虚函数。
怎么使用多态:父类指针或引用指向子类对象 (Animal & animal = cat 或者 Animal *animal = new cat)
示例:
1 #include<iostream> 2 using namespace std; 3 4 class Animal 5 { 6 public: 7 virtual void speak() //必须加virtual,继承就继承指针了,不加virtual,子类继承后也是是空类size(1) 8 { 9 cout << "动物在说话" << endl; 10 } 11 }; 12 13 class Cat :public Animal 14 { 15 public: 16 //子类必须实现,不实现的话,还是继承父类的&Animal::speak 17 void speak() 18 { 19 cout << "小猫在说话" << endl; 20 } 21 }; 22 23 void DoSpeak(Animal& animal) 24 { 25 animal.speak(); 26 } 27 28 class Dog :public Animal 29 { 30 public: 31 void speak() 32 { 33 cout << "小狗在说话" << endl; 34 } 35 36 }; 37 void test01() 38 { 39 Cat cat; 40 DoSpeak(cat);//多态的使用,Animal & animal =cat,或者Animal *animal=new Cat; 41 42 Dog dog; 43 DoSpeak(dog); 44 } 45 int main() 46 { 47 test01(); 48 49 system("pause"); 50 51 return 0; 52 }
实现原理:
在vs中k开发者命令工具中,可以通过命令:cl /d1 reportSingleClassLayout类名 “xxx.cpp”
可以查看单类布局报告,如下图:
标签:函数,子类,什么,多态,C++,virtual,Animal,父类 From: https://www.cnblogs.com/py369/p/17353605.html