王者荣耀官方网站体验服
0
2025 / 06 / 23
virtual是定义C++中虚函数的关键字。
1、virtual关键字的作用:
c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要功能是实现动态绑定。
2、virtual关键字的使用情况:
virtual可用来定义类函数和应用到虚继承。
友元函数构造函数 static静态函数不能用virtual关键字修饰;
普通成员函数和析构函数可以用virtual关键字修饰。
3、virtual关键字的效果:
class GrandFather//祖父类
{
public:
GrandFather(){}//构造函数
virtual void fun()//虚函数声明定义
{
cout<<"GrandFather call function!"<< endl;
}
};
class Father: public GrandFather//父类,公有继承祖父类
{
public:
Father(){}//构造函数
void fun()//fun函数声明定义
{
cout<<"Father call function!"<< endl;
}
};
class Son: public Father//子类,公有继承父类
{
public:
Son(){}//构造函数
void fun()//fun函数声明定义
{
cout<<"Son call function!"<< endl;
}
};
void print(GrandFather* father)//输出函数,祖父类形参
{
father->fun();//调用fun函数
}
int _tmain(int argc, _TCHAR* argv[])
{
Father* pfather= new Son;//建立一个父类的指针让它指向子类
pfather->fun();
GrandFather* pgfather= new Father;
print(pgfather);//祖父类指针变量
return 0;}
4、virtual的继承性:
只要基函数定义了virtual,继承类的该函数也就具有virtual属性;即 GrandFather, Father,Son同时定义virtual void fun()与GrandFather一个定义virtual void fun效果是一样的。
扩展资料
vitual关键字的用途:
1、vitual基类
在多重继承中,从派生类到基类存在多条路线时(多个继承脉络或者途径),一个这种派生类的对象实例化将包含多个基类对象,浪费资源且调用混乱的现象出现。
因此引入了vitual baseclass,来在运行阶段克服多个基类对象的产生。这个vitual是在运行阶段保证对象唯一性的。
2.vitual函数
虚函数的出现,是由于基类的指针可以执行派生类,因此引出了不便,引入vitual函数,来告诉编译器,出现这种情况时,在运行时动态链接进行处理。
3.vitual在纯虚函数中使用
纯虚函数完全是为了继承体系的完整,也是集成vitual函数的作用而产生的。代表了编译器阶段对象的绑定,将调用选择转移到运行时动态绑定。
综上:vitual关键的引入,可以理解为阻止编译阶段的静态绑定,将绑定(虚函数)和约束工作(虚基类)转移到运行时动态处理。
参考资料:百度百科——virtual