c什么时候使用虚拟函式,什么是虚拟函式,C虚拟函式讲解

fjmyhfvclm2025-01-28  1

育知同创教育的回答:


虚拟函式就是在基类中被关键字virtual说明,并在派生类中重新定义的函式。虚拟函式的作用是允许在派生类中重新定义与基类同名的函式,并且可以通过基类指标或引用来访问基类和派生类中的同名函式。

虚拟函式就是为了让基类指标(或引用)能访问派生类中定义的成员。

什么是虚拟函式,c++虚拟函式讲解

千锋教育的回答:


在某基类中宣告为 virtual 并在一个或多个派生类中被重新定 义的成员函式,用法格式为:virtual 函式返回型别 函式名(参数列) ;实现多型性,通过指向派生类的基类指标或引用,访问派生类中同名覆盖成员函式。

虚拟函式定义:简单地说,那些被virtual关键字修饰的成员函式,就是虚拟函式。虚拟函式的作用,用专业术语来解释就是实现多型性(polymorphi**),多型性是将介面与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而採用不同的策略。

虚拟函式的作用:用同一个呼叫形式,既能呼叫派生类又能呼叫基类的同名函式。

虚拟函式的使用方法是:

在基类用virtual宣告成员函式为虚拟函式。这样就可以在派生类中重新定义此函式,为它赋予新的功能,并能方便地被呼叫。在类外定义虚拟函式时,不必再加virtual。

在派生类中重新定义此函式,要求函式名、函式型别、函式引数个数和型别全部与基类的虚拟函式相同,并根据派生类的需要重新定义函式体。c++规定,当一个成员函式被宣告为虚拟函式后,其派生类中的同名函式都自动成为虚拟函式。因此在派生类重新宣告该虚拟函式时,可以加virtual,也可以不加,但习惯上一般在每一层宣告该函式时都加virtual,使程式更加清晰。

如果在派生类中没有对基类的虚拟函式重新定义,则派生类简单地继承其直接基类的虚拟函式。

定义一个指向基类物件的指标变数,并使它指向同一类族中需要呼叫该函式的物件。

通过该指标变数呼叫此虚拟函式,此时呼叫的就是指标变数指向的物件的同名函式。通过虚拟函式与指向基类物件的指标变数的配合使用,就能方便地呼叫同一类族中不同类的同名函式,只要先用基类指标指向即可。如果指标不断地指向同一类族中不同类的物件,就能不断地呼叫这些物件中的同名函式。

这就如同前面说的,不断地告诉计程车司机要去的目的地,然后司机把你送到你要去的地方。

c++中虚拟函式如何定义,使用时应该注意什么?

千锋教育的回答:


/*--

定义纯虚拟函式介面:virtual void f()=0; //只是提供介面,实现留给继承类

使用时应注意:子类必须要实现该函式

--*/

#include

using namespace std;

class a

;class b:public a

};void main()

的回答:


虚拟函式的定义要这样,virtual 返回型别+函式名(引数);

虚拟函式呼叫时要注意,在类继承的时候,子类呼叫的虚拟函式和父类中虚拟函式的区别

热心网友的回答:


虚拟函式在宣告时与一般函式的不同地方就是需要新增一个标誌符virtual,在定义时和普通函式相同。在呼叫时和一般函式的呼叫也是相同的,只不过要注意多型而已。

是不是只有虚拟函式才能定义为纯虚拟函式,c++语法。

千锋教育的回答:


你概念有点混淆了,这个virtual void fun()=0; 是纯虚拟函式;virtual void fun(); 是虚拟函式。它们是有区别的。有纯虚拟函式的类一般都是虚基类,主要用于继承,让子类来实现虚拟函式。

虚拟函式的作用当然是多型了~~

class base

{public:

void base::fun() {cout<<"base"

return 0;

} 如果fun 是虚拟函式显示什么,不是虚拟函式显示什么?自己试试

在某基类中宣告为 virtual 并在一个或多个派生类中被重新定 义的成员函式,用法格式为 virtual 函式返回型别 函式名 参数列 实现多型性,通过指向派生类的基类指标或引用,访问派生类中同名覆盖成员函式。虚拟函式定义 简单地说,那些被virtual关键字修饰的成员函式,就是虚拟函式。虚拟函式...

纯虚拟函式就是抽象类函式。宣告是virtual void fn 0 没有实现体的函式。补充一点,含有纯虚拟函式的类是抽象类 纯虚拟函式是一种特du殊的虚函zhi数,它的一般格式dao如下 专class 类名 属 在许多情况下,在基类中不能对虚拟函式给出有意义有实现,而把它说明为纯虚拟函式,它的实现留...

虚拟函式用于实现类的继承所体现的多型性,当一个类的成员函式被宣告为虚的,那么这个类的派生类如果过载了这个函式,那么在呼叫这个函式时,会先确认这个类例项是原来的类还是派生类 因为父类的指标可以指向子类 如果是父类,那么呼叫父类的版本,如果是子类,则呼叫对应的子类的版本。class a class b ...

转载请注明原文地址:https://www.gamev918.cn/baike/1357918.html