2010-03-31 27 views
2

說我有一個方法,並且該方法在它實例化一個Person類:C++實例化一個方法中的類,然後從不同的方法改變成員變量?

void methodA() 
{ 
    Person personObject; 
} 

我將如何訪問該對象的方法從另一個方法中?即

void methodB() 
{ 
    personObject.someMethod(); 
} 

我意識到這是一個痛苦nooby問題:像什麼P

+0

你不是叫'methodB'。當你這樣做時,'methodA'將會結束並且你製作的'Person'被破壞。如果你需要一個'Person'作爲你班級的數據,那麼把它作爲一個成員。 – GManNickG 2010-03-31 00:59:37

回答

4

傳遞給其他函數的引用。

void methodB(Person &personObject) 
{ 
    personObject.someMethod(); 
} 

void methodA() 
{ 
    Person personObject; 
    methodB(personObject); 
} 
+0

只是爲了澄清methodB的personObject可以被稱爲任何東西。該名稱不需要與methodA的名稱相匹配。 – 2010-03-31 01:05:39

1

你不能。第一個Person對象是一個本地對象,並且在該函數的作用域之外消失一次。您需要使其成爲其他方法的類的一部分來查看它。

0

您需要將personObject設置爲類的成員。此外,如果您必須在methodA中創建personObject,而不是在構造函數中初始化它,那麼您需要動態地使用new創建對象。

class MyClass 
{ 
public: 
    MyClass() 
     : personObject(0) 
    { 
    } 
    ~MyClass() 
    { 
     delete personObject; 
    } 
    void methodA() 
    { 
     personObject = new Person(); 
    } 
    void methodB() 
    { 
     personObject->someMethod(); 
    } 
private: 
    Person* personObject; 
}; 
+0

當然,還需要實現複製構造函數和賦值運算符。 – GManNickG 2010-03-31 02:53:15

0

也許你想要的personObject是你的類的成員變量:

class SomeClass { 
    Person personObject; 
public: 
    void methodA(); 
    void methodB(); 
}; 

void SomeClass::methodA() { 
    personObject = Person(123); 
} 

void SomeClass::methodB() { 
    personObject.someMethod(); 
} 
相關問題