いいえ、基本クラスに追加する必要はありません。
class A
{
public:
virtual int doSomethingCool() = 0 {}
};
class B : public A
{
public:
int doSomethingCool() {return 0;}
};
class C: public A
{
private:
int doSomethingCool(); // hide base class version!
public:
int doSomethingCool(int param) {return param;}
};
基底クラスのポインタを介して行わ場合は、まだdoSomethingCool()
を呼び出すことができます。
struct A
{
virtual int doSomethingCool() = 0;
};
struct A_specific : A
{
virtual int doSomethingCoolWithThis(int i) = 0;
};
class ConcreteA : public A
{
int doSomethingCool() { return 0; }
};
class ConcreteA_specific : public A_specific
{
int doSomethingCool() { return 0; }
int doSomethingCoolWithThis(int param) { return param; }
};
は、その後、私はプログラムになります。私は別の、より具体的な、インタフェースを導入しているだろう
C c;
//c.doSomethingCool(); // doesn't work, can't access private member
c.doSomethingCool (42);
A &a = c;
a.doSomethingCool();
//a.doSomethingCool (42); // doesn't work, no member of A has that signature
これは本当にC++ですか? – Chubsdad
私は擬似コードで簡略化しました。 –
2番目のクラスが別のものを必要とする場合は、別のインターフェイスか初期インターフェイスが間違っていることを意味します。 – David