//定义类Rectangle
class Rectangle
{
private://定义私有成员变量
float width,height,area;
public:
//定义带参数的构造方法
Rectangle(float f1,float f2)
{
width=f1;//设置宽度
height=f2;//设置高度
area=f1*f2;//计算面积
}
/**
* 声明一个友元函数,该函数是对运算符">"的重载
* 友元:友元可以是方法也可以是其他的类,友元能够访问本类中的所有
* 成员,包括私有成员,但友元不属于本类。
*/
friend int operator>(Rectangle r1,Rectangle r2);
};
//是对上面声明的友元的定义
int operator>(Rectangle r1,Rectangle r2)
{
if(r1.area>r2.area)
return 1;
if(r1.area==r2.area)
return 0;
if(r1.area
}
void main( )
{ //定义两个“矩形”类,并比较二者的面积大小
Rectangle r1(3,4);
Rectangle r2(2.5,5);
cout<<(r1>r2)<
/****************************
* 这段代码基本没有什么问题,可以直接运行,只是建议把那个函数改成
* 下面的形式:
int operator>(Rectangle r1,Rectangle r2)
{
if(r1.area==r2.area)
return 0;
else if(r1.area>r2.area)
return 1;
else
return -1;
}
*************************************/
友元就是有好的意思,可以使用友元类的函数和变量。
友元函数就是:定义一个函数,它不类的成员函数,但是可以访问这个类的私有成员。
这个代码关于友元函数的问题没啥问题。但是r1.area==r2.area这句,float类型的变量是有精度的,不能用==来比较。
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
test.cpp
F:\c++\test.cpp(18) : error C2248: 'area' : cannot access private member declared in class 'Rectangle'
F:\c++\test.cpp(6) : see declaration of 'area'
F:\c++\test.cpp(18) : error C2248: 'area' : cannot access private member declared in class 'Rectangle'
F:\c++\test.cpp(6) : see declaration of 'area'
F:\c++\test.cpp(20) : error C2248: 'area' : cannot access private member declared in class 'Rectangle'
F:\c++\test.cpp(6) : see declaration of 'area'
F:\c++\test.cpp(20) : error C2248: 'area' : cannot access private member declared in class 'Rectangle'
F:\c++\test.cpp(6) : see declaration of 'area'
F:\c++\test.cpp(22) : error C2248: 'area' : cannot access private member declared in class 'Rectangle'
F:\c++\test.cpp(6) : see declaration of 'area'
F:\c++\test.cpp(22) : error C2248: 'area' : cannot access private member declared in class 'Rectangle'
F:\c++\test.cpp(6) : see declaration of 'area'
执行 cl.exe 时出错.
test.obj - 1 error(s), 0 warning(s)
楼上那么多人说没问题,为什么我编译之后出现了错误呢?不懂,求教~~