2011-11-01 51 views
1

如何從C++對象內部訪問外部變量?你會用指針嗎?什麼是正確的語法?如何訪問對象內部的變量

我不熟悉指針,所以之前所說的任何內容基本上都是直接射過我的腦袋。

+4

你想達到什麼目的? –

+0

我想從第一個對象中調用第二個對象的函數。我希望能夠去'foo.bar.SaySomething('Hello!');'其中foo是我的第一個對象,bar是對第二個對象的引用,假設我的第二個對象有一個名爲'SaySomething ' 在上面。 此外,爲什麼我的文章被編輯? –

+0

因此,執行'foo.SaySomething(「Hello!」)'也是合法的? –

回答

0

要麼存放指向foo在你的對象(這意味着你必須從某個地方將它設置爲正確富)或傳遞給你的對象類調用SaySomething()方法foo參考。在前一種情況下,您將不得不檢查一個NULL指針。在後者中不允許NULL指針。

+0

@Muntoo是非常有幫助的,但這實際上是我最終做的,所以我必須接受這個回答。 –

0

作爲一個過於寬泛的回答,您需要爲您嘗試使用的變量提供可尋址的上下文。這實際上意味着什麼取決於你想要做什麼以及代碼中你試圖去做什麼。變量是全球性的,是另一個類的成員,是靜態可訪問的。如果您是入門讀者,請查看CPlusPlus.com's tutorial on variables作爲一般參考,如果您更喜歡書籍人,請查閱Stroustrup的Programming: Principles and Practice Using C++

在響應你的澄清,這是從here修改:

int main() { 
    CRectangle rect (3,4); 
    MyWeirdShape wshapeA; 
    cout << "rect area: " << rect.area() << endl; 
    cout << "Weird Shape area: " << wshapeA.area() << endl; 
    return 0; 
} 

我們是CRectangle類的main()方法中,創造MyWeirdShape類型的新對象,然後調用area()得到它的大小。如果這是一個靜態方法,我們可以跳過新對象的創建,只需撥打MyWeirdShape::area()即可。

+0

我只需要知道如何專門調用一個非全局對象上的函數從另一個對象內。我並沒有真正開始,我只是想知道指針背後的原理,如果這些都是神奇的解決方案。沒有其他語言我用過指針,所以他們對我來說是新的。 –

+0

指針當然可以在這種情況下使用,但它們並不是真正的答案。如果您只是想了解指針背後的概念,請查看本文。 http://www.cplusplus.com/doc/tutorial/pointers/ – Carth

+0

我也推薦cplusplus.com;這是我學習所謂的'高級'C++的地方。 –

1

chat相關部分:

[艾略特:]我有一個主要的Map對象。我有幾個'Item'對象都需要能夠訪問同一個Map對象。我認爲指針是這個關鍵。我錯了嗎?

[...]

[艾略特:]我items需要訪問Map對象,因爲他們需要告訴它,他們在哪裏。

[muntoo:]哦,好吧,在Map裏面有Items

class Map { 
    std::vector<Item> items; 
}; 
+0

我實際上最終傳遞了一個對象的引用,我沒有設法讓這個工作對我來說... –

0

可以說我有2類

class apple 
{ 
    public: 
     double get_wt();//this returns the wt variable 
    private: 
     double wt; 
} 

class fruit 
{ 
    public: 
     double get_apple_wt();//this returns the wt variable of an apple object whose memory location is stored in apple_ptr 

    private: 
     apple *apple_ptr;//points to the memory location of apple object 
} 
在上述情況下get_apple_wt(

)將是完全有效的,如果你有動態分配的蘋果對象:

apple_ptr = new apple(); 

這是你想知道什麼? 請做評論!