c++之多态

2020-03-12  本文已影响0人  全村的卡密

父类指针、子类指针

多态

Animal *p = new Cat();
//并不会调用 cat 的函数,而是调用animal的函数。

c++通过虚函数实现多态

class Animal{
public:
  virtual void run(){
  cout<<"animal run"<<endl;
  }
class Cat{
  void run(){
  cout<<"cat run"<<endl;
  }
}

重写(override)

多态的要素

虚函数与普通函数的汇编区别


speak()是普通函数,run()是虚函数。

虚函数原理

使用sizeof计算虚函数占用内存大小,发现它比普通函数大了4个字节(x86),是因为其中有一个指向虚表的指针。

虚表

image.png

结合上表,就能理解汇编代码


image.png
image.png image.png

调用父类成员函数

父类::函数名

animal::speak();

虚析构函数

纯虚函数

virtual void run() = 0;

抽象类

多继承

虚继承

虚继承能解决菱形继承的问题(变量冗余)


image.png image.png image.png
上一篇下一篇

猜你喜欢

热点阅读