這裏呼叫是一個骨架代碼:函數從不同的類
class C{
callMe(){}
};
class A{
// How to use callMe()
};
class B : C {
callMe();
A a;
};
在這個例子中類B擴展類C,所以它可以調用的CallMe()方法。但我需要使用callMe()使用類A,因爲類A不能擴展類C.我不知道如何?
這裏呼叫是一個骨架代碼:函數從不同的類
class C{
callMe(){}
};
class A{
// How to use callMe()
};
class B : C {
callMe();
A a;
};
在這個例子中類B擴展類C,所以它可以調用的CallMe()方法。但我需要使用callMe()使用類A,因爲類A不能擴展類C.我不知道如何?
你需要做一個包含類型的對象C.
class A
{
private:
C objC;
public:
void WhateverMethod() { objC.CallMe(); }
};
此外,對於繼承語法
class B : C{
};
如果你想B到只需訪問的CallMe()那麼您不需要在B中重新定義它。它將從C繼承它。如果您希望B覆蓋CallMe,那麼您需要執行此操作:
class C
{
public:
virtual void CallMe() { //definition }
};
class B : public C
{
public:
void CallMe() { //redefine it here }
};
注意,我從你的語法錯誤中認定你是一位JAVA程序員。在C++中,方法不會自動標記爲虛擬的,如果您想使用多態性,則必須將它們標記爲虛擬,並且您必須從指針中使用它們才能起作用。
您需要提供的C
一個實例:
class C {
public: // has to be public
void callMe() const {}
};
class A{
public:
A(const C& inst) : inst(inst) {}
void foo() {
inst.callMe();
}
private:
const C& inst;
};
這將不會編譯,除非你使'callMe' const成員函數,或者另存爲'inst '作爲非const引用。 – Nawaz 2012-08-13 13:59:33
class C{
callMe(){}
friend class A;
};
class A{
//use call me here
};
好吧,這是遠遠'C++代碼'。離「C」更遠。 – 2012-08-13 13:55:03
你可以公開該功能嗎?如果沒有,你可以使用'朋友'。 C也沒有類,因爲你不需要額外的工作就可以繼承它們。 – chris 2012-08-13 13:55:53
我只是把一個骷髏... – FlintOff 2012-08-13 13:55:57