У меня вопрос двух частей. Во-первых, я понимаю, что C++ обеспечивает только инкапсуляцию данных на уровне класса, что означает, что все объекты одного класса имеют доступ к частным членам друг друга. Я понимаю причину этого, но нашел несколько ссылок (т.е. http://www.programmerinterview.com/index.php/c-cplusplus/whats-the-difference-between-a-class-variable-and-an-instance-variable/), которые, по всей видимости противоречат этой точке, предполагая, что я мог бы сделать следующее:Инкапсуляция уровня экземпляра с C++
class testclass {
private:
// Below would be an instance-level variable, and new memory for it is set aside
// in each object I create of class testclass
int x;
// Below would be a class-level variable, memory is set aside only once no matter
// how many objects of the same class
static int y;
}
То, что я хотел бы сделать, это на самом деле сделать эту работу, т.е. я хотел бы определить переменную в классе, который является приватным в каждом экземпляре (это мой второй вопрос). Поскольку вышеприведенный фрагмент кода не достигает этого, есть ли работа, которую я могу использовать для создания данных, которые являются частными для отдельных объектов? Спасибо!
EDIT:
Это правда, что я все еще учусь основы OO. Я буду использовать пример вездесущей машины, чтобы показать, что я пытаюсь сделать, и я уверен, что это должно быть обычным делом. Я приветствую любые предложения о том, чтобы пересмотреть его:
class car {
private:
int mileage;
public:
car(int); // Constructor
void odometer();
};
car::car(int m) {
mileage = m;
}
void car::odometer() {
return mileage;
}
int main(void) {
car ford(10000), honda(20000);
cout<<ford.odometer(); //Returns 20000, since honda constructor overwrites private variable 'mileage'
}
Есть ли способ, чтобы получить одометр() метод, чтобы вернуть пробег либо брод или Хонды, в зависимости от того, что я хочу?
Каков первый вопрос? И почему вы хотите защитить экземпляры от доступа к переменным-членам друг друга? –
'// Возвращает 20000, поскольку конструктор honda перезаписывает личную переменную« пробег ». Это совершенно неправильно. Вы это подтвердили? Он перезаписывает свой * собственный * член, конечно, но зачем он касаться чего-нибудь еще? – GManNickG