Do I need to override functions with virtual ones?

In Cplusplus, in a derived class, if we define a member function to override a member function in its parent class, is it necessary to declare a virtual virtual machine in the derived class?

For example, does one need to be declared gvirtual in Bso that it can override A::g? Which one of the following is true for the stated purpose?

class A{
public:
void f(){printf("A");}
virtual void g(){printf("A");}
}
class B : public A{
public:
void f(){printf("B");}
void g(){printf("B");}
}

or

class A{
public:
void f(){printf("A");}
virtual void g(){printf("A");}
}
class B : public A{
public:
void f(){printf("B");}
virtual void g(){printf("B");}
}

Thank.

+4
source share
5 answers

No no. The function is virtual from the first point of the hierarchy, where you declare it as such.

override ++ 11 . , . , , , - , . ++ 11 .

+6

, , virtual.

override - :

class A{
public:
    void f()         { printf("A"); }
    virtual void g() { printf("A"); }
};
class B : public A{
public:
   void f()          { printf("B"); }
   void g() override { printf("B"); }
};
+9

- virtual . , ++ 11 override.

+3

. virtual , .

+2

Cplusplus, , - - , ?

[class.virtual]/2 ( ):

- vf โ€‹โ€‹ Base Derived, Base, - vf , -list, cv-qualification ref-qualifier ( ), Base::vf, Derived::vf ( , ), Base::vf.

, . .

pre-++ 11, virtual, - , .
++ 11, override , , , .

+2
source

Source: https://habr.com/ru/post/1658868/


All Articles