C++中多态的基本概念以及虚表的基本概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 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结尾,
如果子类有重写,创建对象时就会覆盖掉这个虚函数;

因此那些指向子类的父类指针,就能调用子类写的函数了!

【注意,每一个对象都有自己的一个列表】

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/84800688