2012-10-18 62 views
-1

假設我們有一個兩個班指向的返回值

class A 
{ 
    public: 
     Course (int num) ; 
     int getAnum(); 

     int num; 
} 


A::A(int num) 
{ 
    this->num = num; 
} 

int A::getAnum() 
{ 
    return this->num; 
} 

,並在主

A* a = new A(12); 
B* b = new B(a); 

其他類

class B 
{ 
    public: 
     B (A * a = NULL); 
     A * getA();  
    A * a; 
} 


B::B(Course * a) 
{ 
    this->a = new A; 
    this->a = a; 
} 
A * B::getA() { return this->a; } 

,問題是我怎麼能打印號碼

cout << b.getA->getAnum(); 

cout <<b.a->getAnum(); 

哪一個是正確的?我可以通過返回值指向另一個函數嗎?這兩個代碼示例中會發生什麼?爲什麼?請不要注意語法錯誤。對不合適的代碼和糟糕的英語感到抱歉。謝謝你的回答:)

+0

代碼段中有多少個編譯錯誤! – 2012-10-19 00:00:07

+0

@Desolator:我數四。你有多少人? –

+0

需要多長時間才能找出爲什麼b.getA() - > getAnum()是因爲B對象默認構造爲NULL A而導致分段錯誤?你不妨再仔細思考這個設計。 – WhozCraig

回答

0

cout < < b.a-> GetAnum();因爲你的變量是公開的,它可以被訪問。

+0

如果數據成員是私人的,該怎麼辦 – user1559792

+1

僅僅因爲它是公開的並不意味着你應該使用它。實際上,你應該使用'GetAnum()'而不是'private'。 **免責聲明:**使用getters和setter不適合使用。我在這裏推薦它,因爲給出的例子缺乏細節和背景。有時它不會被期望。 –

0

你在你的代碼,通過解決這些問題,你可能會發現更多有用的東西,找到你的答案,但在C旁邊++爲了叫你需要使用operator()的功能,所以你應該寫b->getA()->getAnum()而不是許多錯誤b->getA->getAnum()。在您的版本中,b->getA是一項功能,您無法將operator->應用到它!但b->getA()調用該函數並返回一個A*,您可以使用它來調用getAnum()