我有三個類;A、B和C:
class A
{
public:
A() {}.
protected:
int x = 0;
int y = 0;
};
class B
{
public:
B() {}.
protected:
int x = 1;
int y = 1;
};
class C : public A, B
{
public :
C() {}.
};
我希望C的x個成員是來自A的那個,C的y個成員是來自B的那個,我如何做到這一點?因為我寫了class C : public A, B,現在C.x和C.y都是0。當我有多重繼承時,我有這個問題,我想從一個父類繼承一些成員,從另一個父類繼承一些成員。是否有一個類似于成員函式的選項,可以使用關鍵字using來選擇將使用哪個函式?
uj5u.com熱心網友回復:
現在
C.x和C.y都是0
實際上,C::x和C::y都是模糊的,不會被編譯。你可以通過使用顯式地選擇和公開基類中的成員:
class C : publicA, B
{
public :
C() {}。
using A::x;
using B::y;
};
uj5u.com熱心網友回復:
我想從一個父類繼承一些成員,從另一個父類繼承一些成員。
這是不可能的。所有的成員都將被繼承。C有A::x,A::y, B::x和B::y。
是否有一個類似于成員函式的選項,可以使用關鍵字using.
你可以幫助編譯器解決歧義(見Quentin的回答),但事實是你仍然繼承了所有的成員。
class C : public A, B {
public :
using A::x;
using B::y;
C() {
std::cout << x << '
'; //0
std::cout << y << '
'; / 1
//這些雖然還在這里:; ?
std::cout << A::x << '
'; // 0
std::cout << A::y << '
'; //0
std::cout << B::x << '
'; /span> 1
std::cout << B::y << '
'; / 1
}
};
uj5u.com熱心網友回復:
我想從一個父類那里繼承一些成員
不可能繼承 "一些成員"。你只能完整地繼承一個基體。在這個例子中,類
C間接包含C::A::y和C::B::y以及兩個x成員。現在C.x和C.y都是0。
實際上,現在沒有
C::x也沒有C::y,因為這些名字是模糊的。是否有一個類似于成員函式的選項,人們可以使用關鍵詞來使用是的,你可以使用
using來使C::x和C::y的名字不含糊。它將隱藏 "未使用的 "名稱,但物件并沒有消失。和成員函式一樣。
你應該改變設計。你可以這樣做,例如:你應該改變設計。
struct Ax { int x = 0; }; struct Ay { int y = 0; }; struct A : Ax, Ay {}; 結構 Bx { int x = 1; }; struct By { int y = 1; }; struct B : Bx, By {}; struct C : Ax, By {};轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/320086.html
標籤:
上一篇:在NSPopupButton選單中使用與主選單中相同的鍵Equivalent
下一篇:實作對另一個介面的依賴性
