說我有一個方法,並且該方法在它實例化一個Person類:C++實例化一個方法中的類,然後從不同的方法改變成員變量?
void methodA()
{
Person personObject;
}
我將如何訪問該對象的方法從另一個方法中?即
void methodB()
{
personObject.someMethod();
}
我意識到這是一個痛苦nooby問題:像什麼P
說我有一個方法,並且該方法在它實例化一個Person類:C++實例化一個方法中的類,然後從不同的方法改變成員變量?
void methodA()
{
Person personObject;
}
我將如何訪問該對象的方法從另一個方法中?即
void methodB()
{
personObject.someMethod();
}
我意識到這是一個痛苦nooby問題:像什麼P
傳遞給其他函數的引用。
void methodB(Person &personObject)
{
personObject.someMethod();
}
void methodA()
{
Person personObject;
methodB(personObject);
}
只是爲了澄清methodB的personObject可以被稱爲任何東西。該名稱不需要與methodA的名稱相匹配。 – 2010-03-31 01:05:39
你不能。第一個Person
對象是一個本地對象,並且在該函數的作用域之外消失一次。您需要使其成爲其他方法的類的一部分來查看它。
您需要將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;
};
當然,還需要實現複製構造函數和賦值運算符。 – GManNickG 2010-03-31 02:53:15
也許你想要的personObject
是你的類的成員變量:
class SomeClass {
Person personObject;
public:
void methodA();
void methodB();
};
void SomeClass::methodA() {
personObject = Person(123);
}
void SomeClass::methodB() {
personObject.someMethod();
}
你不是叫'methodB'。當你這樣做時,'methodA'將會結束並且你製作的'Person'被破壞。如果你需要一個'Person'作爲你班級的數據,那麼把它作爲一個成員。 – GManNickG 2010-03-31 00:59:37