版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/84800688
目录
多态的基本概念
多态是一种泛型编程思想(同样的代码,实现不同的功能;主要是父类指针调用子类函数【多态的核心】)
虚函数是实现这个思想的语法基础
使用父类的指针去指向子类的空间【这样,父类的指针不能调用子类的函数】
如果是虚函数就可以实现父类的指针,调用子类的成员
虚函数 斜变
如下代码:
#include <iostream>
using namespace std;
class Base{
public:
virtual Base& print(){
Base base;
cout << "Base print called" << endl;
return base;
}
};
class SUBClass: public Base{
public:
SUBClass& print(){
SUBClass subclass;
cout << "SUBClass called" << endl;
return subclass;
}
};
void main(){
Base *base = new SUBClass;
base->print();
getchar();
}
程序运行截图如下:
函数的返回值为当前的类的类名
注意:虚函数不能是内联函数(vs不会报错,编译的时候会自动把他去掉)
构造函数不能是虚函数
虚表的基本概念
如果有一个类为Base,里面有3个虚函数,1个普通的函数,
那么那3个虚函数就会被放到一个列表里面,以0x00000000结尾,
如果子类有重写,创建对象时就会覆盖掉这个虚函数;
因此那些指向子类的父类指针,就能调用子类写的函数了!
【注意,每一个对象都有自己的一个列表】