2014-09-30 195 views
-2

所以我有兩個類,比如說class Aclass B。在B類的構造函數中,我創建了一個類型爲A(private)的對象。在A類中,我有一個顯示A的內容的成員函數void displayA()通過對象訪問成員函數

現在我運行int main(),我創建了一個類型B的對象(最好也是存儲在B中的類型A的對象)。我的問題是我如何使用A到B的方法?

我試過objB.displayA(),但那顯然沒有奏效。我是否需要在B中創建一個調用A中成員函數的成員函數?還是有更優雅的解決方案

回答

2

class B必須具有class A類型的成員變量。例如:

class B 
{ 
public: 
    A a; 
    int x; 
}; 

然後,你可以這樣調用:

B objB; 
objB.a.displayA(); 
+0

不知道的是,謝謝:)但是,如果「對象a」是私人的呢?我需要吸氣劑嗎? – TheGuyWithStreetCred 2014-09-30 09:05:05

+0

是的。考慮讓B有一個調用'a.displayA'的函數,而不是純粹的'getter'(它們通常不是一個好主意)。如果你爲'a'的每個功能輸入getter等,那麼你也可以讓'a'公開。 – 2014-09-30 09:17:43

+0

謝謝你,很好的建議 – TheGuyWithStreetCred 2014-09-30 09:29:29

1

你要麼需要通過objBclass A你正在改變實例,然後你通過它裏面的功能,來電obA.displayA();,或者你可以創建objAobjB類變量,然後在B的任意函數中調用objA.displayA();

1

第一,你沒有公共和私有? 以及你在你的B類中是否有A類型的變量; 這樣

#include <iostream> 
class A 
{ 
    public: 
     void displayA() { 
      std::cout << "call a" << std::endl; 
     } 
}; 

class B 
{ 
    public: 
     B():a(){} 
     A a; 
}; 
int main(int argc, const char *argv[]) 
{ 
    B b; 
    b.a.displayA(); 
    return 0; 
} 

,比THD B級也可以是:

`class B 
{ 
    public: 
     B():a(){} 
     A a; 
     void call() { 
      this -> a.displayA(); 
     } 
    };` 

,比撥打電話(),它在B類

+0

他們是私人的,對不起 – TheGuyWithStreetCred 2014-09-30 09:07:35

+0

你的意思是a的變量是私人的,並且上面的secend B類代碼可以調用displayA(),0.0 – ipaomian 2014-09-30 09:11:20

+0

對象a是私人的。只有構造函數和成員函數是公共的。我應該爲對象添加一個吸氣劑嗎? – TheGuyWithStreetCred 2014-09-30 09:16:13