C++virtual函数重写,在继承的时候没有写关键字也仍然是虚函数吗?

#include<iostream>
using namespace std;

class A
{
public:
virtual void f1();
virtual void f2(int);
};

class B :public A
{
public:
virtual void f1();
void f2(int);
};

class C :public B
{
public:
virtual void f1();
virtual int f3();
};
为什么类B里的f2函数还是虚函数,不是覆盖了吗?如果不是该怎么解释f2函数仍是虚函数?

父类定义成虚函数,子类中和父类虚函数相同名称,参数表相同的函数会自动变成虚函数。不管加没有virtual
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-23
如果基类声明了一个函数为虚函数
那么派生类里重写这个函数且函数名 参数 返回值什么都不变的话会默认为虚函数本回答被网友采纳
第2个回答  2014-11-23
会自动继承virtual属性。还是虚函数。

C++中virtual和非virtual版本对在派生类重写函数时候的有什么区别
virtual 的函数, 会有多态。也就是,一个基类的指针、引用调用虚函数时,其具体调用的虚函数在运行时确定。非virtual版本 是重载, 重载只是作用域不一样

C++使用虚函数的时候,子类也要使用virtual关键字吗
c++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此,在子类重新声明该虚函数时,可以加,也可以不加,但习惯上每一层声明函数时都加virtual,使程序更加清晰。

...参数同返回只是父类里面是虚函数,子类没有虚函数限定 有问题吗_百 ...
没有问题,这就是虚函数的作用,子类中可以override(重写)父类中的虚函数,给出子类自己的实现方法,子类中其实省略了父类函数声明前的virtual,子类中加上virtual也是没有问题的,可有可无。

C++的虚函数是不是没有方法体的函数?
回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,class B的print()也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。 现在重新运行main2的代码,这样输出的结果就是This is A和This is B了。 现在来消化一下,我...

关于c++中虚函数和接口的关系区分
确切说, C++中并没有专门的“接口”的这个东西。像JAVA,C#就有。C++中有virtual声明的虚函数,在继承上 override实现多态。这里C++就还有一个概念“纯虚函数”,是指没有函数实现的虚函数,在虚函数声明后加"=0"。\/\/A.hclass A{public: virtual void fun1(); \/\/虚函数,必须要有函数体实...

虚函数 纯虚函数是一个东西吗?
在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念。因为它充分体现了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广。比如在微软的MFC类库中,你会发现很多函数都有virtual关键字,也就是说,它们都是虚函数。难怪有人甚至称虚函数是C++语言的精髓。 那么,什么是虚函数呢,我们先...

c++只有虚函数才能被重写吗
没有virtual 关键字的情况下派生类有和基类相同的函数时直接覆盖(覆盖和重写不同,重写是事先就知道派生类可能重写该函数)基类的,不构成重写但达成效果类似。所以只有虚函数才能被重写。

为什么c++中virtual要翻译为虚函数?
虚函数通过在基类定义中使用关键字"virtual"来标识。虚函数可以被重写(override)或重载(overload),但这并不意味着虚函数本身的实现也随重写或重载而改变。其核心价值在于,允许子类通过不同的方式实现相同接口,从而实现程序的灵活性和复用性。纯虚函数(pure virtual function)是另一种形式的虚函数...

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

C++基类函数中的virtual关键词到底表示什么意思呢
单纯想覆盖,不需要父类写好的功能的话 确实无所谓。甚至可以说没有virtual关键字会提升一些函数调用的效率。但是假如说你子类重载的函数希望调到父类函数功能。比如 class Parent { virtual void printSelf() { cout<<"I am your father"<<endl; }};class Son :public Parent{ virtual...

相似回答