Вы не устанавливаете переменную.Вы звоните setVariable
на object1
и getVariable
на object2
, поэтому член 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.