我有命名爲A三個類,B,和C. B,從A繼承和C從B.繼承(A - >乙 - > C)。正確繼承設計
我也有一個名爲IBinary的抽象基類。我想讓所有的類都實現IBinary接口。當我從IBinary進行A類繼承時,我的代碼的輸出是C::readb
。當A類不從IBinary繼承時,輸出是B:readb
。
是什麼力量讓我的三個類別訂閱相同接口的正確方法?如果我只有頂級類(A)從接口類繼承,那麼我需要重構我的代碼,以便我沒有像上面那樣的解決方案問題。
如果我有明確的所有類從接口類繼承的話,我將有一個更復雜的類層次結構,併成爲更接近其死亡的鑽石。
#include <iostream>
class IBinary {
public:
virtual void readb(std::istream& in) = 0;
};
// Basic A -- change whether this inherits from IBinary
class A : public IBinary {
public:
A() {};
void readb(std::istream& in) {}
};
// Specialized A
class B : public A {
public:
B() {};
void load() {
this->readb(std::cin); // <-- which readb is called?
}
void readb(std::istream& in) {
std::cout << "B::readb" << std::endl;
}
};
// Specialized B
class C : public B {
public:
C() {};
void readb(std::istream& in) {
std::cout << "C::readb" << std::endl;
}
void foo() {
B::load();
}
};
int main() {
C c;
c.foo();
}
我不明白這個問題。你想要什麼* c.foo'做什麼? –
一個類訂閱接口是什麼意思? – Casey
@Casey我正在使用訂閱意味着實現。我想執行更清楚。 – Derek