千锋教育的回答:
在某基类中宣告为 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 是虚拟函式显示什么,不是虚拟函式显示什么?自己试试 ️c++什么时候使用虚拟函式 育知同创教育的回答: 虚拟函式就是在基类中被关键字virtual说明,并在派生类中重新定义的函式。虚拟函式的作用是允许在派生类中重新定义与基类同名的函式,并且可以通过基类指标或引用来访问基类和派生类中的同名函式。 虚拟函式就是为了让基类指标(或引用)能访问派生类中定义的成员。 ️c++中 解构函式中可以呼叫虚拟函式么 育知同创教育的回答: c++中 析构 函式中不可以呼叫虚拟函式。 effective c++ 中有这样的描述:同样的原因也适用于析构过程。一旦派生类解构函式执行,这个物件的派生类资料成员就被视为未定义的值,所以 c++ 就将它们视为不再存在。 c++中派生类在构造时会先呼叫基类的建构函式再呼叫派生类的建构函式,析构时则相反,先呼叫派生类的解构函式再呼叫基类的建构函式。 假设一个派生类的物件进行析构,首先呼叫了派生类的析构,然后在呼叫基类的析构时,遇到了一个虚拟函式,这个时候有两种选择:plan a是编译器呼叫这个虚拟函式的基类版本,那么虚拟函式则失去了执行时呼叫正确版本的意义;plan b是编译器呼叫这个虚拟函式的派生类版本,但是此时物件的派生类部分已经完成析构,「资料成员就被视为未定义的值」,这个函式呼叫会导致未知行为。 回头的世界的回答: 很简单,你定义一个虚拟函式,然后在解构函式中呼叫看看,debug除错,能执行就证明可以! 自己动手比实践,比问别人「记住」一些规则,更有效果! 徐霄沛的回答: 是可以的,不过,这样呼叫没有什么意义,不能实现多型。 虚拟函式就是在基类中被关键字virtual说明,并在派生类中重新定义的函式。虚拟函式的作用是允许在派生类中重新定义与基类同名的函式,并且可以通过基类指标或引用来访问基类和派生类中的同名函式。虚拟函式就是为了让基类指标 或引用 能访问派生类中定义的成员。什么是虚拟函式,c 虚拟函式讲解 在某基类中宣告... 虚拟函式用于实现类的继承所体现的多型性,当一个类的成员函式被宣告为虚的,那么这个类的派生类如果过载了这个函式,那么在呼叫这个函式时,会先确认这个类例项是原来的类还是派生类 因为父类的指标可以指向子类 如果是父类,那么呼叫父类的版本,如果是子类,则呼叫对应的子类的版本。class a class b ... 纯虚拟函式就是抽象类函式。宣告是virtual void fn 0 没有实现体的函式。补充一点,含有纯虚拟函式的类是抽象类 纯虚拟函式是一种特du殊的虚函zhi数,它的一般格式dao如下 专class 类名 属 在许多情况下,在基类中不能对虚拟函式给出有意义有实现,而把它说明为纯虚拟函式,它的实现留...