在C++中的一種方式,讓我們說我有派生類實現接口類BaseInterface,其中BaseInterface只有純虛函數和虛析構函數:++強制使用的界面,在c
class BaseInterface
{
public:
virtual void doSomething() = 0;
~BaseInterface(){}
};
class Derived : public BaseInterface
{
public:
Derived() {}
~Derived(){}
protected:
virtual void doSomething();
private:
int x;
};
Derived類層次結構之外的任何類都不應該直接調用Derived :: doSomething(),即它只能通過BaseInterface類以多態方式訪問。爲了執行這條規則,我已經對Derived :: doSomething()進行了保護。這很好,但我正在尋找pro/con關於這種方法的意見。
謝謝!
肯
如果你的方法不是公共接口的一部分(不適用於課堂以外的用法),爲什麼要使它成爲'public'? – Nekuromento 2011-05-17 23:10:57
@Nekuromento問題是,C++可以讓你做類Foo的事情:public Derived {public:virtual void doSomething(); } foo; foo.Derived :: doSomething的();這將繞過Foo的定義。 – Neil 2011-05-17 23:20:13
記住你的BaseInterface析構函數也是虛擬的 – 2011-05-17 23:20:54