Virtual method causes compilation error in Derived class

Consider the following code:

#include <iostream>
using namespace std;

class A
{
public:
    virtual int f() {cout <<"A:: f()\n"; return 1;}
    virtual void f(int) {cout <<"A:: f(int)\n";}
    virtual void g() {cout <<"A::g()\n";}
};

class B3 : public A
{
public:
    void f() {cout <<"B3::f ()\n";}
};

int main()
{
    return 0;
}

The following error is issued:

..\main.cpp:17: error: conflicting return type specified for 'virtual void B3::f()'
..\main.cpp:9: error:   overriding 'virtual int A::f()'

but why? in the worst case, I would think I would have a case of hiding, but instead I get a compilation error regarding Avirtual int f() {cout <<"A:: f()\n"; return 1;}

thanks Ronen

+2
source share
2 answers

Do not confuse overrides with hiding. You are redefining virtual machines.

Defining your class is equivalent to:

class B3 : public A
{
public:
    virtual void f() {cout <<"B3::f ()\n";}
};

​​, , , , . , ++. , , . , , .

, :

A* a;
....
a->f();

a-f()? a A, B3. , int, . . ?

,

A a;
a.f();

cal f a, b3.f f B3. , . , ( , ), ).

, ... , ? ?

0

, f() . , , A f . , f() , . - , , (void int), .

0

All Articles