2012-08-13 53 views
-8

這裏呼叫是一個骨架代碼:函數從不同的類

class C{ 
    callMe(){} 
}; 

class A{ 
    // How to use callMe() 
}; 

class B : C { 
    callMe(); 
    A a; 
}; 

在這個例子中類B擴展類C,所以它可以調用的CallMe()方法。但我需要使用callMe()使用類A,因爲類A不能擴展類C.我不知道如何?

+5

好吧,這是遠遠'C++代碼'。離「C」更遠。 – 2012-08-13 13:55:03

+1

你可以公開該功能嗎?如果沒有,你可以使用'朋友'。 C也沒有類,因爲你不需要額外的工作就可以繼承它們。 – chris 2012-08-13 13:55:53

+0

我只是把一個骷髏... – FlintOff 2012-08-13 13:55:57

回答

2

你需要做一個包含類型的對象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++中,方法不會自動標記爲虛擬的,如果您想使用多態性,則必須將它們標記爲虛擬,並且您必須從指針中使用它們才能起作用。

0

您需要提供的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; 
}; 
+2

這將不會編譯,除非你使'callMe' const成員函數,或者另存爲'inst '作爲非const引用。 – Nawaz 2012-08-13 13:59:33

1
class C{ 
    callMe(){} 
friend class A; 
}; 


class A{ 

//use call me here 

};