网站建设资讯

NEWS

网站建设资讯

c语言虚函数是什么意思 如何用c语言实现虚函数

在c++中虚函数和多态性是什么意思

多态是指使用相同的函数名来访问函数不同的实现方法,即“一种接口,多种方法”,用相同的形式访问一组通用的运算,每个运算可能对应的行为不同。C++支持编译时多态和运行时多态,运算符重载和函数重载就是编译时多态,而派生类和虚函数实现运行时多态。运行时多态的基础是基类指针,基类指针可以指向任何派生类对象。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册虚拟主机、营销软件、网站建设、古县网站维护、网站推广。

虚函数与基类指针在一起时会有奇妙的现象。

1.虚函数是为了实现多态而存在的

请看以下程序:

#include

using namespace std;

class F

{

public:

void novir()

{

cout "father novir"

}

virtual void vir()

{

cout "father vir"

}

};

class S : public F

{

public:

void novir()

{

cout "son novir"

}

void vir()

{

cout "son vir"

}

};

int main()

{

F f;

S s;

s.novir();// 子类起作用,输出为 son novir

s.vir();//子类起作用,输出为son vir

f.novir();//父类起作用(因为其本身在这里与子类没有关系),输出father novir

f.vir();// 父类起作用(因为其本身在这里与子类没有关系),输出father vir

F *ff;

ff = s;//将一个父类指针指向一个子类对象;子类指针不能指向父类对象

ff-novir();//父类起作用,显示father novir

ff-vir();//子类起作用,虚函数多态的用处,显示 son vir,具体参见下面解释

return 0;

}

输出:

[root@localhost root]# ./vir

son novir

son vir

father novir

father vir

father novir

son vir

例如:父类为 车,子类为汽车

子类指针不能指向父类对象(即将父类对象赋值给子类指针):

因为子类中有些信息父类没有,如果用指针访问的时候很可能访问到父类没有的一些属性及函数,会出错。父类的对象可以有很多,自行车,摩托车,轿车等,如果用一个父类的对象赋给子类汽车的指针,汽车有的属性,例如发动机,父类对象就没有,会产生错误。

父类指针可以指向子类对象(即将子类对象赋值给父类指针):

由于继承的关系,子类对象同样也是父类的对象,例如:汽车有轮子,汽车也属于车,父类车也有轮子,这种情况下,子类对象就成为了父类的一个对象,所以只能操作父类有的属性及函数。对于那些父类没有的属性,必须将父类指针强制转化为子类指针后才可使用。

虚函数的多态体现

我们都知道,程序运行的过程要经过 预处理,编译,运行,链接等步骤。虚函数在程序运行的时候才被绑定,编译的时候不进行相关处理,只有运行的时候才对其进行相关操作。

所以在程序片:

=======================================================

F *ff;

ff = s;//将一个父类指针指向一个子类对象;子类指针不能指向父类对象

ff-novir();//父类起作用,显示father novir

ff-vir();//子类起作用,虚函数多态的用处,显示 son vir

=======================================================

程序在运行时决定调用虚函数的哪个定义,这个决定依赖于基类型指针所指向的对象的类型。通过点运算调用虚函数时,忽略了虚函数的多态性,**只有**使用***基类型指针访问虚函数***,运行时的多态性才得以体现。即C++根据指针指向对象的类型来决定调用虚函数的哪个定义,在这里,指针所指向的类型为子类对象,所以虚函数使用子类的函数。

请问c++中,基类和派生类的函数都有virtual什么意思?

virtual是虚拟的意思,也就是说那些函数是虚函数。

基类相当于父亲,派生类相当于儿子,儿子可以继承爸爸的东西。所以方法可以重写。

编译的时候就不知道如果调用派生类对象的时候调用哪个函数了

加了virtual可以把函数的绑定推迟到运行时。也就是你运行时绑定函数,根据你的参数调用基类函数还是派生类的函数

C++中虚函数,和抽象类到底是什么意思

虚函数在运行时具有多态性,若某个基类函数声明为虚函数,那么公有派生类将定义与基类虚函数原型相同的函数。(通俗说:基类函数加virtual成为虚函数后,在派生类里将重新定义与基类虚函数原型相同的函数,当用基类指针或基类引用操作派生类对象时,系统将会调用派生类里的同名函数!)

抽象类就是至少包含一个纯虚函数(只声明函数不具体定义功能,在派生类中定义功能)的类是抽象类,抽象类只作为基类派生新类。抽象类作用是更有效发挥多态特性!

参考教材及个人见解,纯手打,仅供参考,满意请采纳一下吧!


名称栏目:c语言虚函数是什么意思 如何用c语言实现虚函数
分享地址:http://njwzjz.com/article/dddgcei.html