C++基类函数中的virtual关键词到底表示什么意思呢

基类函数偶遇virtual关键词到底表示什么意思呢,表示子类可以重载么?

但是如果没有virtual关键词,子类的同名函数依然可以将父类的同名函数覆盖掉,那么有没有virtual关键词根本就是一样的吧(纯虚函数除外)? 这样看的话virtual关键词主要还是用于纯虚函数么?

不知道我这样理解是否正确。。

单纯想覆盖,不需要父类写好的功能的话 确实无所谓。甚至可以说没有virtual关键字会提升一些函数调用的效率。

但是假如说你子类重载的函数希望调到父类函数功能。

比如

class Parent {
    virtual void printSelf() {
        cout<<"I am your father"<<endl;
    }
};
class Son :public Parent{
    virtual void printSelf() {
        cout <<"son"<<endl;
        Parent::printSelf();
    }
};


希望达到这样的功能,父类的函数就必须有virtual关键字。如果子类的这个函数没有virtual,那么再继承他的类就不能这样重载。

追问

如果父类函数没有virtual关键字,子类就不能显示调用父类的函数么?

追答

也不是。。我没解释到位。。其实用在子类中调用Parent::printSelf,无论有没有virtual关键字都可以。
有virtual关键字表示他会被覆盖,在父类中调用可以调用到子类的函数。
没有的话,如果在父类中调,会调父类的函数;在子类中直接调用会调用子类的函数。
也就是两个函数基本是独立的都存在

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-15
1、基类成员函数有vitrual,子类可以重写该函数,前提是同名且参数列表和返回类型必须一致,这种情况下 通过 基类的 指针和引用调用这个virtual函数时会发生动态绑定。
2、即使基类成员函数有virtual,子类也可以有同名的成员(但是参数列表不同),此时子类这个函数和基类中原有的函数是相互独立的追问

父类没有virtual关键字的话、子类可以用同名函数覆盖, 如果但是不能进行同名但参数不同的函数进行重载? 是这样么?

C++基类函数中的virtual关键词到底表示什么意思呢
希望达到这样的功能,父类的函数就必须有virtual关键字。如果子类的这个函数没有virtual,那么再继承他的类就不能这样重载。

请问c++中,基类和派生类的函数都有virtual什么意思?
virtual是虚拟的意思,也就是说那些函数是虚函数。基类相当于父亲,派生类相当于儿子,儿子可以继承爸爸的东西。所以方法可以重写。编译的时候就不知道如果调用派生类对象的时候调用哪个函数了 加了virtual可以把函数的绑定推迟到运行时。也就是你运行时绑定函数,根据你的参数调用基类函数还是派生类的函数 ...

C++中virtual关键字的用法
虚拟函数在C++中扮演着核心角色,特别是在面向对象编程的上下文中。当一个类包含有被`virtual`关键字标记的函数时,表示该函数是一个虚函数,其行为受到多态性的影响。多态性是允许函数在不同的对象类型上表现出不同行为的能力。1、虚函数的应用与区别于重载 在分析虚函数时,首先需要明确它与函数重载的...

关键字virtual在C++中是什么意思,有什么用途?
virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。默认情况下,方法是非虚拟的。不能...

C++基础-关键字virtual
virtual:虚基类说明符 任何类类型(无论是以 类关键词 class 还是 struct 声明者)均可被声明为派生于一或多个基类,各基类也可以派生自其自身的基类,组成继承层级结构。基类的列表在类声明语法的 基类子句 中提供。基类子句 由字符 : 后随一或多个 基类说明符 的逗号分隔列表组成。涉及虚继承时,...

C++中的virtual关键字是什么?怎么用?
virtual是定义C++中虚函数的关键字 。1、virtual关键字的作用:c++中的函数调用默认不适用动态绑定。要触发动态绑定,必须满足两个条件:第一,指定为虚函数;第二,通过基类类型的引用或指针调用。由此可见,virtual主要功能是实现动态绑定。2、virtual关键字的使用情况:virtual可用来定义类函数和应用到虚...

C#中的virtula是什么?
C#中的virtula的意思是实际上的,实质上的,虚拟的,虚的。Virtual是C++ OO机制中很重要的一个关键字,Virtual方法分为虚方法和抽象方法。一、Virtual方法(虚方法)virtual关键字用于在基类中修饰方法。virtual的使用会有两种情况:情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么...

virtual是什么意思 virtual指什么
1、virtual是定义C++中虚函数的关键字。在面向对象程序设计领域,C++、ObjectPascal等语言中有虚函数(英语:virtualfunction)或虚方法(英语:virtualmethod)的概念。这种函数或方法可以被子类继承和覆盖,通常使用动态调度实现。这一概念是面向对象程序设计中(运行时)多态的重要组成部分。简言之,虚函数...

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

C++中的virtual关键字是什么?怎么用?
virtual是定义C++中虚函数的关键字 。在使用virtual之前,C++对成员函数使用静态联编,而使用virtual,并且在调用函数时是通过指针或引用调用,C++则对成员函数进行动态联编。用法:class Base { public:Base(){} public:virtual void print(){cout<<"Base";} };class Derived:public Base { public:...

相似回答