Virtual表

//在头文件中
#ifndef __CBASE_H__
#define __CBASE_H__

#include <iostream>
using std::cout;
using std::endl;
class CBase
{
public:
	virtual void f1()
	{
		cout<<"你妈妈喊你回家吃饭...."<<endl;
	}
	virtual void f2()
	{
		cout<<"神马都是浮云"<<endl;
	}
	virtual void f3()
	{
		cout<<"浮云回家吃饭了....."<<endl;
	}

};

#endif


//在主文件里
#include "stdafx.h"
#include "CBase.h"


int _tmain(int argc, _TCHAR* argv[])
{
	CBase d, *pd = &d;
	
	for (int i = 0; i < 3; ++i)
	((void (*)())(*((int*)(*((int*)pd))+i)))();
	return 0;
}


虚函数是动态函数的基础。

但是只能用于非静态非友元非内联的成员函数。(以上函数均没有this指针)

virtual只能用于说明类声明时的原型,实现时不能写。

具有继承性,基类中声明了虚函数,派生类中不论是否说明,同原型的函数自动为虚函数。

不是重载,而是重写。调用方式:通过基类类型的指针或者引用。执行时会根据指针指向对象的类型,决定调用哪个类的成员函数。一个指向基类的的指针,可以用来指向从基类中公有派生的任何对象,(注意必须是公有派生,兼容性原则)

virtual的作用就是使继承于基类的各派生类,肩负了重写虚函数的责任。

虚函数本身虽然不能是外来的友元函数,但可以外派出去,成为其他类的友元函数。

如果一个类中含有虚函数,则编译器对其生成的对象添加一个void型的指向指针的指针(它指向了一个指针数组<虚表>);

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值