2010-03-31 20 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(); 
} 
相关问题