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语言用来声明虚函数的 声明了纯虚函数的类可以创建对象
URL网址:http://scyanting.com/article/dohjogj.html