Я решил попробовать что-нибудь из любопытства, чтобы посмотреть, как это будет работать. Мне пришло в голову проверить, может ли один объект класса получить доступ к закрытым переменным другого объекта того же класса. По-видимому, может, если эта программа представляет собой какой-либо индикатор:
#include <iostream>
using namespace std;
class Colour
{
private:
int var;
public:
void setVar(int x)
{
var = x;
}
int getVar() const
{
return var;
}
int getOtherVar(Colour col) //steals the private var of another Colour object
{
return col.var;
}
};
int main()
{
Colour green;
Colour red;
green.setVar(54);
red.setVar(32);
cout << "Green is " << green.getVar() << endl;
cout << "Red is " << red.getVar() << endl;
cout << "Green thinks Red is " << green.getOtherVar(red) << endl;
return 0;
}
Я ожидал, что она потерпит неудачу таким образом, чтобы каждый уникальный экземпляр класса имел доступ только к своему собственному частные члены. Я провел небольшое исследование и обнаружил, что конфиденциальность - это особенность класса c, а не особенность экземпляра c.
В любом случае, я решил поэкспериментировать и обнаружил что-то немного запутанное. Я отредактировал реализацию для getOtherVar()
и превратил ее в следующую:
int getOtherVar(Colour col) const
{
col.var = 67;
return col.var;
}
Я решил, что если объекты могут обращаться к членам друг друга, ключевое слово const
не должно защищать другие объекты того же класса от тоже изменить? Это не так, и я понятия не имею, почему.