Overloading a pure virtual function

I usually use pure virtual functions for those methods that my code should work well. Therefore, I create interfaces, and then other users implement their derived classes. Derived classes have only these virtual functions as public, and some additional methods should be implemented as private, since my code does not call them. I don’t know if this can be considered good OOP practice (is there any design template?). Anyway, my question is: Can the user overload a pure virtual function?

i.e.

class Base
{
public:
 Base();
 virtual ~Base();
 virtual void foo(int,double)=0;
};

class Derived:
public Base
{
 private:
  // methods
 public:
 Derived();
 virtual ~Derived();
 virtual void foo(int, double, double); //this doesn't work
 };

The solution may be:

 virtual void foo(int,double,double=0)=0;

in the base class, but it is very limited. What do you think about?

+5
source share
6 answers

.

virtual void foo(int,double)=0;
virtual void foo(int, double, double);

- , .

override , , . ++ 11.

virtual void foo(int, double, double) override;

, override . Derived . ( , , ). , , Derived, - , .

+9

.

, Base, Derived. Base, "" Base ( Derived, , ).

+4

- , , , .. . , .

, , . - .

+3

, .

,

 Derived d;
 d.foo(5, 10.0); // Works as expected

 Base &b = d; // b is polymorphic
 b.foo(3,10,4); // foo(int, double, double) is not in class Base, hence compile-time resolution fails!
0

, . .

. virtual void foo (int, double) = 0; virtual void foo (int, double, double);

0

foo ?

class Base
{
public:
 Base();
 virtual ~Base();
 virtual void foo(int,double)=0;
 virtual void foo(int,double,double)=0;
};
0
source

All Articles