2011-10-18 79 views
1

我试图让这个程序获取用户输入并将其放入公共函数并将其分配给privateVariable,然后我希望它返回privateVariable转换为main()并将其输出到屏幕,但它显示的是未定义int(-858993460)的值。我在这里有什么逻辑问题?C++类没有返回我的私有变量的正确值

#include <iostream> 
#include <string> 

using namespace std; 

class MyClass 
{ 

    private: 
     int privateVariable; 

    public: 
     int userVariable; 

    void setVariable(int userVariable) 
    { 
     privateVariable = userVariable;    
    } 

    int getVariable() 
    { 
     return privateVariable;      
    } 

}; 

int main() 
{ 
    int userVariable; 
    cin >> userVariable; 

    MyClass object1; 
    MyClass object2; 

    object1.setVariable(userVariable);   
    object2.getVariable();     

    cout << object2.getVariable();    

    system("PAUSE"); 

    return 0; 
} 
+0

为什么你要为'object1'设置变量并尝试从'object2'中取回它?要么你错过了'静态'变量的概念,或者你做了一个类型,我猜想。 – arne

回答

6

您在object1设置和object2获得。 object1object2是不同的对象。由于object2中的变量未设置,您将收到垃圾值。

而且我看不到MyClass中公众userVariable的使用。

+0

固定。谢谢你的工作。 – Garrettchap1

1

您未设置变量。您在object2object1getVariable上拨打setVariable,因此object1的成员保持未初始化状态。

object1.setVariable(5); // object1.privateVariable = 5 
         // object2.privateVariable -> still uninitialized 
object2.getVariable(); // returns uninitialized variable 

对于这项工作,这取决于你想要什么:

class MyClass 
{ 
private: 
    static int privateVariable; 
//...... 
} 

这样,privateVariable将是一个类范围的成员,而不是实例范围的。这意味着它对于该类的所有实例具有相同的值(并且即使实例未被创建)。这也意味着你可以让你的两个功能的静态:

class MyClass 
{ 
private: 
    static int privateVariable; 
public: 
    static void setVariable(int userVariable) 
    { 
     privateVariable = userVariable;    
    } 

    static int getVariable() 
    { 
     return privateVariable;      
    } 
}; 

,你可以调用的方法,而不实例:

MyClass::setVariable(5); //MyClass.privateVariable = 5; 
MyClass::getVariable(); //returns 5 
object1.getVariable(); //returns also 5 

另一种选择是,如果你不想静态成员,设置成员两个对象:

object1.setVariable(5); // object1.privateVariable = 5 
          // object2.privateVariable -> still uninitialized 
object2.setVariable(5); //object2.privateVariable = 5 
object2.getVariable(); // returns 5 

或者,你可以定义一个构造函数,并设置变量有:

class MyClass 
{ 
private: 
    static int privateVariable; 
//...... 
public: 
    MyClass() 
    { 
     privateVariable = 5; 
    } 
} 

有了这个,每一个对象创建将有成员初始化为5

0

对象2并没有因为你把它放在你的object1初始化的变量,你贴只会工作,如果privateVariable是静态的代码。