首页编程虚函数(什么是虚函数)

虚函数(什么是虚函数)

编程之家2023-11-03102次浏览

大家好,今天给各位分享虚函数的一些知识,其中也会对什么是虚函数进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

虚函数(什么是虚函数)

虚函数和实函数的区别

虚函数和实函数的区别如下:

1、虚函数和纯虚函数Q可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstractclass),而只含有虚函数的类(class)不能被称为抽象类(abstractclass)。

2、虚函数可以被直接使用,也可以被子类(subclass)重载以后以多态的形式调用,而纯虚函数必须在子类(subclass)中实现该函数才可以使用,因为纯虚函数在基类(baseclass)只有声明而没有定义。

3、虚函数和纯虚函数都可以在子类(subclass)中被重载,以多态的形式被调用。

4、虚函数和纯虚函数通常存在于抽象基类(abstractbaseclass-ABC)之中,被继承的子类重载,目的是提供一个统一的接口。

5、对于虚函数来说,父类和子类都有各自的版本。由多态方式调用的时候动态绑定。

虚函数(什么是虚函数)

什么是虚函数

虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:

virtual

函数返回值类型

虚函数名(形参表)

{

函数体

虚函数(什么是虚函数)

}

虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。

当程序发现虚函数名前的关键字virtual后,会自动将其作为动态联编处理,即在程序运行时动态地选择合适的成员函数。

([2010.10.28]

注:下行语义容易使人产生理解上的偏差,实际效果应为:

如存在:Base

->

Derive1

->

Derive2

及它们所拥有的虚函数func()

则在访问派生类Derive1的实例时,使用其基类Base及本身类型Derive1,或被静态转换的后续派生类Derive2的指针或引用,均可访问到Derive1所实现的func()。)

动态联编规定,只能通过指向基类的指针或基类对象的引用来调用虚函数,其格式:

指向基类的指针变量名->虚函数名(实参表)

基类对象的引用名.

虚函数名(实参表)

虚函数是C++多态的一种表现

例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virtual(虚函数)。

使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。

如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virtual

函数名=0

我们把这样的函数(方法)称为纯虚函数。

如果一个类包含了纯虚函数,称此类为抽象类

虚函数的实例

#include<iostream.h>

class

Cshape

{

public:

void

SetColor(

int

color)

{

m_nColor=color;}

void

virtual

Display(

void)

{

cout<<"Cshape"<<endl;

}

private:

int

m_nColor;

};

class

Crectangle:

public

Cshape

{

public:

void

virtual

Display(

void)

{

cout<<"Crectangle"<<endl;

}

};

class

Ctriangle:

public

Cshape

{

void

virtual

Display(

void)

{

cout<<"Ctriangle"<<endl;

}

};

class

Cellipse

:public

Cshape

{

public:

void

virtual

Display(void)

{

cout<<"Cellipse"<<endl;}

};

void

main()

{

Cshape

obShape;

Cellipse

obEllipse;

Ctriangle

obTriangle;

Crectangle

obRectangle;

Cshape

*

pShape[4]=

{

&obShape,

&obEllipse,&obTriangle,

&

obRectangle

};

for(

int

I=

0;

I<

4;

I++)

pShape[I]->Display(

);

}

本程序运行结果:

Cshape

Cellipse

Ctriangle

Crectangle

条件

所以,从以上程序分析,实现动态联编需要三个条件:

1、

必须把动态联编的行为定义为类的虚函数。

2、

类之间存在子类型关系,一般表现为一个类从另一个类公有派生而来。

3、

必须先使用基类指针指向子类型的对象,然后直接或者间接使用基类指针调用虚函数。

请问什么是虚函数

函数的传统定义:

设在某变化过程中有两个变量x、y,如果对于x在某一范围内的每一个确定的值,y都有唯一确定的值与它对应,那么就称y是x的函数,x叫做自变量。

我们将自变量x取值的集合叫做函数的定义域,和自变量x对应的y的值叫做函数值,函数值的集合叫做函数的值域。

函数的近代定义:

设A,B都是非空的数的集合,f:x→y是从A到B的一个对应法则,那么从A到B的映射f:A→B就叫做函数,记作y=f(x),其中x∈A,y∈B,原象集合A叫做函数f(x)的定义域,象集合C叫做函数f(x)的值域,显然有CB。

虚函数的定义是什么

1、虚函数的概念

虚函数是以virtual关键字声明的基类函数。如果在基类中将某个函数指定为virtual,并且派生类中有另外一个该函数的定义,则编译器将知道我们不想静态连接该函数。我们真正需要的是基于调用该函数的对象种类,在程序的特定位置选择调用哪一个函数。

2、定义

语法:virtual函数返回类型函数名(参数表){函数体}

虚函数必须是基类的非静态成员函数,其访问权限可以是private或protected或public,在基类的类定义中定义虚函数的一般形式:

class基类名{

.......

virtual返回值类型将要在派生类中重载的函数名(参数列表);

};

关于虚函数的内容到此结束,希望对大家有所帮助。

凯里网站建设 贵州凯里的建设银行卡卡号开头控件注册?如何注册ocx控件