C++私有成员问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 23:51:02
inline complex complex::operator +(const complex &c)
{
return complex(real + c.real, imag + c.imag);
}
为什么能直接访问c.real?
各种编译器都可以啊
complex complex::operator +( complex c)
{
return complex(real + c.real, imag + c.imag);
}
这样也可以啊。

这是complex类的成员函数,而c是complex类对象的常引用,类的成员函数访问该类对象的私有成员还有什么疑问?我想大概你思维限制在了只能访问当前对象的私有成员如real,其实real实际是this->real或者说(*this).real,那与c.real又有什么区别呢

各种编译器都可以,这C++的原则问题
complex complex::operator +( complex c)与
inline complex complex::operator +(const complex &c)
都是对的,但性能有差异
区别有二
1、inline声明,通知编译器把此函数作为内联展开,即在函数调用处用此代码替换,以免去函数调用的开销,记住只是建议inline并不强制,在类外定义成员函数时加上inline,与在类内定义函数效果相同。一般inline函数要放在头文件中。函数比较简短调用频繁时该声明为inline。
2、传值与传址的区别,传递引用不用复制对象,直接用传递的实参,为确保不被修改,声明为const,而传递对象则用实参来复制构造一个局部对象,此函数操作的是局部对象当然不会修改实参了,但会增加系统开销。大家公认这种情况下用常引用方式。

可能是编译器问题
参考http://zhidao.baidu.com/question/100934884.html

函数声明inline complex complex::operator +(const complex &c)已经声明是内置函数并且是类complex的成员(complex::),成员函数肯定可以访问私有成员了

因为运算符重载函数是complex类的成员函数,而本类的成员函数是可以访问本类中的私有数据成员的。