gpt4 book ai didi

C++ 传递对类私有(private)变量的引用-编译器问题?

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:52 24 4
gpt4 key购买 nike

类中私有(private)变量的引用传递是否可以在该类之外直接更改?或者这是编译器“应该”选择并阻止的东西?

例子:

//-------------------------------------------
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

我需要使用其他/不同的对象来做这样的事情,这些对象对所有者类是私有(private)的,但在需要时可以由其他人更改。我最不想要的就是这种做法将来会回来并咬我。

本质上让我担心的是,我想将类/结构基本上视为指向缓冲区的指针,并将成员的地址视为此缓冲区的偏移量,这样即使您传递一个指针值成员如果没有它所属的类/结构的基指针,它将毫无用处。这是我本能的感觉应该是这样的,所以上面的例子应该是不可能的。

最佳答案

没有什么可以阻止的,你通过引用传递你的私有(private)成员。您正在调用的函数没有访问您的私有(private)成员,它正在更改它自己的参数(恰好是某个类的成员)。代码没问题,但重要的是你调用的函数没有保留对你的私有(private)成员的引用。

关于C++ 传递对类私有(private)变量的引用-编译器问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com