纯虚函数重载

Ale*_*Ale 6 c++ oop design-patterns overloading pure-virtual

我通常使用纯虚函数来处理我的代码所需的那些方法.因此,我创建接口,然后其他用户实现其派生类.派生类只将这些虚函数作为公共函数,而一些其他方法应该作为私有实现,因为我的代码不会调用它们.我不知道这是否可以被认为是OOP的一个好习惯(有没有设计模式?).无论如何,我的问题是:用户可以重载纯虚函数吗?

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
 };
Run Code Online (Sandbox Code Playgroud)

解决方案可能是:

 virtual void foo(int,double,double=0)=0;
Run Code Online (Sandbox Code Playgroud)

在基类但它是非常有限的.你有什么想法?

Abh*_*t_K 9

这两个功能是不同的.后者并不压倒第一个

virtual void foo(int,double)=0;
virtual void foo(int, double, double);
Run Code Online (Sandbox Code Playgroud)

第二个是特定于派生的新虚函数.

如果你override在最后放一个编译会抱怨你没有覆盖任何东西.这是c ++ 11检查.

virtual void foo(int, double, double) override;
Run Code Online (Sandbox Code Playgroud)

用户可以覆盖纯虚函数以确认override在函数结束时使用以进行验证.在您的情况下,只能使用派生指针或类型访问第二个函数.(虽然除非正确地重写和实现纯虚函数,否则无法实例化,直到它是一个抽象类).因此,如果不打算通过那些派生的类来进一步覆盖Derived它,那么虚拟就是一个开销,无论如何它都不会覆盖基本方法.