操作符重载函数默认就是友元函数吗?
在对一个操作符进行重载时,没有将它声明成友元,但它还是可以访问私有的成员变量,难道它默认就是友元函数?
我用的是VS2005,这段代码编码和运行都没有问题
我用的是VS2005,这段代码编码和运行都没有问题
class SPoint
{
private:
float data[3];
public:
SPoint():
{
memset(data,0, 3*sizeof(float));
}
SPoint(float x,float y,float z):
{
data[0] = x;
data[1] = y;
data[2] = z;
}
SPoint(const SPoint &pt):
{
memcpy(data,pt.data,3*sizeof(float));
}
void operator =(const SPoint &pt)
{
memcpy(data,pt.data,3*sizeof(float));
}
inline SPoint operator +( const SPoint &p2);//-----没有声明为友元
} ;
SPoint inline SPoint::operator +(const SPoint &p2)
{
SPoint sp;
for(int i=0;i<3;i++)
sp.data[i] = data[i] + p2.data[i];//-------但sp和p2都可以访问data私有变量!
return sp;
}
...全文
相关推荐
cchap运算符重载PPT教学课件.pptx
:`、成员操作符`.`和`->`、成员指针操作符`*`、作用域运算符`::`以及`sizeof`等是不允许重载的。同时,重载运算符不能改变操作数的数量、优先级或结合性,也不能为它们设置默认参数。
C++重载运算符的规则详解
**函数类型**:重载运算符的函数可以是类的成员函数、友元函数,或者非类成员的普通函数。
c重载与模板PPT课件.pptx
运算符重载有两种方式:作为类的成员函数和作为友元函数。成员函数重载时,参数个数比原始运算符少一个(除了后置增量和减量运算符)。友元函数重载时,参数个数与原始运算符相同,并且至少有一个自定义类型的参数。
C++类与继承.pdf
C++支持运算符重载,但有一些限制。运算符重载不能改变操作符的语法规则、优先级或创建新操作符。不允许重载`sizeof`, `->*`, `.`, `::`, `?
C++期末复习卷2.docx
- 每个类可以有多个构造函数,只要它们的参数列表不同,这就是所谓的构造函数重载。 - 没有默认构造函数(即无参数的构造函数)时,编译器不会自动生成。2.


