我通常使用纯虚函数来处理我的代码所需的那些方法.因此,我创建接口,然后其他用户实现其派生类.派生类只将这些虚函数作为公共函数,而一些其他方法应该作为私有实现,因为我的代码不会调用它们.
我不知道这是否可以被认为是OOP的一个好习惯(有没有设计模式?).
无论如何,我的问题是:
用户可以重载纯虚函数吗?
我不知道这是否可以被认为是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 };
解决方案可能是:
virtual void foo(int,double=0)=0;
在基类但它是非常有限的.你有什么想法?
解决方法
这两个功能是不同的.后者并不压倒第一个
virtual void foo(int,double)=0; virtual void foo(int,double);
第二个是特定于派生的新虚函数.
如果你在最后放置一个覆盖,编译会抱怨你没有覆盖任何东西.这是c 11检查.
virtual void foo(int,double) override;
用户可以覆盖纯虚函数以确认函数末尾的使用覆盖以进行验证.在您的情况下,只能使用派生指针或类型访问第二个函数. (虽然除非正确地重写和实现纯虚函数,否则无法实例化,直到它是一个抽象类).因此,如果不打算通过Derived派生的类进一步覆盖它,那么使它成为虚拟是一种开销,因为它不会覆盖基本方法.