谁帮我解释一下一道C++的题目。。
8、设计一个长方形类Rectangle,包含长和宽两个私有数据成员,要求重载运算符“<”或者“>”,并以友元函数方式实现,以比较两个长方形对象面积的大小。classRec...
8、 设计一个长方形类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<r2.area)
return -1;
}
void main( )
{
Rectangle r1(3,4);
Rectangle r2(2.5,5);
cout<<(r1>r2)<<endl;
}
主要是友元函数是什么意思?
谁能帮忙代码上都注释一下。。谢谢了。。
还有这段能不能正常运行? 展开
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<r2.area)
return -1;
}
void main( )
{
Rectangle r1(3,4);
Rectangle r2(2.5,5);
cout<<(r1>r2)<<endl;
}
主要是友元函数是什么意思?
谁能帮忙代码上都注释一下。。谢谢了。。
还有这段能不能正常运行? 展开
展开全部
//定义类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<r2.area)
return -1;
}
void main( )
{ //定义两个“矩形”类,并比较二者的面积大小
Rectangle r1(3,4);
Rectangle r2(2.5,5);
cout<<(r1>r2)<<endl;//这里隐式的调用了友元函数
}
/****************************
* 这段代码基本没有什么问题,可以直接运行,只是建议把那个函数改成
* 下面的形式:
int operator>(Rectangle r1,Rectangle r2)
{
if(r1.area==r2.area)
return 0;
else if(r1.area>r2.area)
return 1;
else
return -1;
}
*************************************/
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<r2.area)
return -1;
}
void main( )
{ //定义两个“矩形”类,并比较二者的面积大小
Rectangle r1(3,4);
Rectangle r2(2.5,5);
cout<<(r1>r2)<<endl;//这里隐式的调用了友元函数
}
/****************************
* 这段代码基本没有什么问题,可以直接运行,只是建议把那个函数改成
* 下面的形式:
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类型的变量是有精度的,不能用==来比较。
这个代码关于友元函数的问题没啥问题。但是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)
楼上那么多人说没问题,为什么我编译之后出现了错误呢?不懂,求教~~
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)
楼上那么多人说没问题,为什么我编译之后出现了错误呢?不懂,求教~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询