c++中的虚函数是什么东西?

如题所述

简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。下面来看一段简单的代码
class A{
public:
void print(){ cout<<”This is A”<<endl;}
};
class B:public A{
public:
void print(){ cout<<”This is B”<<endl;}
};
int main(){ //为了在以后便于区分,我这段main()代码叫做main1
A a;
B b;
a.print();
b.print();
}
通过class A和class B的print()这个接口,可以看出这两个class因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是This is A和This is B。但这是否真正做到了多态性呢?No,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。那现在就把main()处的代码改一改。
int main(){ //main2
A a;
B b;
A* p1=&a;
A* p2=&b;
p1->print();
p2->print();
}
运行一下看看结果,结果却是两个This is A。问题来了,p2明明指向的是class B的对象但却是调用的class A的print()函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数
class A{
public:
virtual void print(){ cout<<”This is A”<<endl;}//现在成了虚函数了
};
class B:public A{
public:
void print(){ cout<<”This is B”<<endl;}//这里需要在前面加上关键字virtual吗?
};
毫无疑问,class A的成员函数print()已经成了虚函数,那么class B的print()成了虚函数了吗?回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,class B的print()也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。
现在重新运行main2的代码,这样输出的结果就是This is A和This is B了。
现在来消化一下,我作个简单的总结,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-26
在类中使用关键词virtual修饰的为虚函数,如
class ob
{
virtual void func(){;}
}
虚函数的主要作用是在派生类与基础之间产生多态性.通俗一点讲.一个类的函数被说明为虚函数,然后他派生下去的类继承过来的这个函数也同时默认为虚函数,当使用一个基类的指针指向一个子类的对象地,那么使用该指针调用的函数将会是所指向对象的函数.举例
class ob1
{
virtual int func(){return 1;}
}
class ob2:public ob1
{
int func(){return 2;}
}
ob2派生自ob1.ob1有一个func的虚函数.ob2同时继承了这个函数.并且改写了它.ob2中的func函数自动成为虚函数.此时我们使用
ob1 *P=new ob2; 使用了一个ob1的指针指向的是ob2的对象.这时p->func;所调用的是ob2的func函数,

注意:一般情况下我们会在这种派生中将基类的析构函数也说明为虚函数如
virtual ~ob1(){;}
这样,他派生的子类的析构函数同时默认为虚析构函数.这样在删除一个指向子类的对象的基类指针时,就会调用指针所指向的类的析构函数.如
delete p;删除的是基类指针,但是p指向的是子类ob2所以虚函数正常的引导先调用子类ob2的析构函数.
另外:构造函数是不能被说明为虚函数的本回答被提问者和网友采纳
第2个回答  2011-12-27
baidu\\\\一下你就知道
第3个回答  2011-12-27
百度百科上有篇文章写的不错,你可以去看看

c++中的虚函数是什么?
C++中的虚函数是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多...

什么是C++虚函数,虚函数的作用和使用方
虚函数定义:简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。虚函数的作用:用同一个调用形式,既能调用派生类又能...

C++中虚函数的作用是什么?它应该怎么用呢?
C++中虚函数的作用:1、简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。2、实现多态性,多态性是将接口与实现进行分离。3、当基类指针指向一个子类对象,通过这个指针调用子类和基类同名成员函数的时候,基类声明为虚函数就会调子类的这个函数,不声明就会调用基类的。C++中虚函数的用法:1、...

为什么c++中virtual要翻译为虚函数?
在C++中,virtual function(虚函数)的翻译源自于其特性——虚拟性,这与英文词汇“virtual”的含义相符。"Virtual"在中文中的解释为“虚拟的”,表示某事物并非真实存在,而是模拟或类似真实的。因此,当我们将virtual function翻译为虚函数时,准确地传达了它作为函数的非直接调用性。虚函数是用于实现多态...

求教,c++中什么时候使用虚函数??
虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。从以上的定义来看,需函数简单的说就是为了让基类指针能够指向派生类中与基类同名的函数而引进的,举个简单的例子...

C++关于虚函数的描述的选择题,新手不会
A)虚函数是一个静态成员函数(静态是编译是实现 X)B)虚函数是一个非成员函数(这里意思是全局函数 X)C)虚函数既可以在函数说明时定义,也可以在函数实现时定义(这是纯虚函数 X)D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 ...

C++ Virtual详解
虚函数就是因为成员函数加了关键字virtual,可见它的重要性。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的...

请问高手,C++虚函数表是什么?怎么用啊?
虚函数的定义 虚函数用来表现基类和派生类的成员函数之间的一种关系. 虚函数的定义在基类中进行,在需要定义为虚函数的成员函数的声明前冠以关键字 virtual. 基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义. 在派生类中重新定义时,其函数原型,包括返回类型,函数...

C++的虚函数是不是没有方法体的函数?
下面是对C++的虚函数这玩意儿的理解。 一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始) 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的...

C++纯虚函数的C++纯虚函数
1、多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。a.编译时多态性:通过重载函数实现b 运行时多态性:通过虚函数实现。2、虚函数虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态...

相似回答