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

2024-06-07

通过引用传递类中的私有变量是否可以在该类之外直接更改,这是可接受的做法吗?或者这是编译器“应该”发现并防止的事情?

Example:

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

Output:

Set by Locals
Changed by Others

我需要使用其他/不同的对象来做类似的事情,这些对象对所有者类来说是私有的,但在需要时可以由其他人更改。我最不想做的就是这种练习在未来回来并告诉我。

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 传递对类私有变量的引用 - 编译器问题? 的相关文章

随机推荐