Является ли передача по ссылке частной переменной в классе, которая должна быть напрямую изменена за пределами приемлемой для этого класса практики? Или это то, что компилятор «должен» поднять и предотвратить?C++ передача ссылки на частную переменную класса - проблема с компилятором?
Пример:
//-------------------------------------------
class Others
{
public:
Others() {};
void ChangeIt(string &str) { str = "Changed by Others"; }
};
//-------------------------------------------
class Locals
{
private:
string PrivateString;
public:
Locals() { PrivateString = "Set by Locals"; };
void VisitOthers() { Others o; o.ChangeIt(PrivateString); }
const string GetString() { return PrivateString; }
};
//-------------------------------------------
int main(void)
{
Locals lo;
cout << lo.GetString() << "\n";
lo.VisitOthers();
cout << lo.GetString() << "\n";
return 0;
}
Выход:
Set by Locals
Changed by Others
мне нужно сделать что-то вроде этого, используя другие/разные объектов, частное к классу владельца, но изменчивое от других, когда это необходимо. Последнее, что я хочу, это такая практика, чтобы вернуться в & байт в будущем.
Что меня беспокоит, так это то, что я хотел бы, чтобы класс/struct рассматривал как основной указатель на буфер, а адрес члена как смещения в этот буфер, так что даже если вы передадите значение указателя член был бы бесполезен без базового указателя класса/структуры, к которому он принадлежит. Это то, что я инстинктивно чувствую, должно быть так, чтобы приведенный выше пример не был возможен.
Я использую чистые виртуальные базовые классы, поэтому не знаю, кто такие друзья. – slashmais
Если вы используете чистые виртуальные функции, виртуальные базовые классы и множественное наследование, то вы можете пойти на деликатес класса сестры. Подробнее на http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.10 Но, во-первых, я бы рекомендовал не менять частный контент в другом классе. Вы можете обрабатывать строку в классе Others и возвращать модифицированную строку Owner, чтобы она была назначена самому владельцу. – bjskishore123
В этом примере местные жители просто используют другие, чтобы выполнить работу. Что не так с этим?Класс должен иметь возможность манипулировать своими частными членами любым способом, которым он нравится? - По той же логике вы не сможете ничего сделать с частным членом строки. Если вы хотите вызвать на нем строковый метод, вы передадите ссылку на частный член как аргумент '* this' для строкового метода! – UncleBens