c语言用来声明虚函数的 声明了纯虚函数的类可以创建对象
C++中的virtual关键字是什么?怎么用?
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
虚函数以何种方式声明?
定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数 [1]
语法:virtual 函数返回类型 函数名(参数表) { 函数体 }
用途:实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数
虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:
class 基类名{
.......
virtual 返回值类型 将要在派生类中重载的函数名(参数列表);
};
哪些函数能被声明为虚函数?为什么?
class A
{
virtual void fun()
{
printf("CA");
}
}
class CA: public A
{
virtual void fun(){
printf("CA");
}
}
CA* pC = new CA;
A* pA = pC;
pA-fun;//调用的是CA::fun();
这就是动态绑定。
一般有子类的类的析构函数要是虚函数,当你需要改变指针类型为父类型(便于管理),但是实现要依赖于子类的话就需要虚函数。更详细的多BAIDU GOOGLE,资料很多的。
当前名称:c语言用来声明虚函数的 声明了纯虚函数的类可以创建对象
分享地址:http://cdiso.cn/article/dohjogj.html