1、(基础题)设有一个圆类:Circle,它有三个private类型的数据成员:x(圆心横坐标)、y(圆心纵坐标)、r(圆的半径),还有两个成员函数:一个是带参数的构造函数,另一个是显示信息的print(),这两个函数的权限均为public。 现要定义一个普通函数circles_area_compare()用来比较两个圆面积的大小,比较结果为int类型:1表示大于,0表示等于,-1表示小于。然后在main()定义两个对象,调用circles_area_compare()函数进行验证。 参考代码: #include <iostream> using namespace std; const double PI=3.14159; class Circle //圆类 { private: int x,y; //圆心坐标 double r; //圆的半径 public: Circle(int xx,int yy,double rr) { x=xx; y=yy; r=rr; } void print() { cout<<"圆心坐标: ("<<x<<", "<<y<<"),半径:"<<r<<endl; } }; int main() { Circle c1(0,0,10), c2(20,20,5); cout<<"圆:"; c1.print(); cout<<"圆:"; c2.print(); //调用友元函数 cout<<"两个圆面积比较结果:"<<circles_area_compare(c1,c2)<<endl; return 0; } 先输入中间段程序代码,再加以运行,并回答下列问题: (1)上述代码能正常运行吗?如果不能,请分析其中的原因。 (2)若要将circles_area_compare()函数声明为Circle类的友元函数,应该怎样处理? (3)通过上述程序,你发现友元函数与普通函数有什么不同? (4)总结一下普通函数作为友元的几个关键点:声明、定义、调用。
时间: 2024-02-25 17:59:31 浏览: 76
中间段程序代码如下:
```c++
#include <iostream>
using namespace std;
const double PI=3.14159;
class Circle //圆类
{
private:
int x,y; //圆心坐标
double r; //圆的半径
public:
Circle(int xx,int yy,double rr)
{
x=xx;
y=yy;
r=rr;
}
void print()
{
cout<<"圆心坐标: ("<<x<<", "<<y<<"),半径:"<<r<<endl;
}
};
//比较两个圆的面积大小
int circles_area_compare(Circle &c1, Circle &c2)
{
double area1 = PI * c1.r * c1.r;
double area2 = PI * c2.r * c2.r;
if(area1 > area2){
return 1;
}else if(area1 == area2){
return 0;
}else{
return -1;
}
}
int main() {
Circle c1(0,0,10), c2(20,20,5);
cout<<"圆:";
c1.print();
cout<<"圆:";
c2.print();
//调用友元函数
cout<<"两个圆面积比较结果:"<<circles_area_compare(c1,c2)<<endl;
return 0;
}
```
问题回答:
(1) 上述代码能正常运行。
(2) 如果要将circles_area_compare()函数声明为Circle类的友元函数,需要在Circle类中添加如下声明:
```c++
friend int circles_area_compare(Circle &c1, Circle &c2);
```
(3) 友元函数与普通函数的不同之处在于,友元函数可以直接访问类中的私有成员,而普通函数则不能。此外,友元函数的声明需要放在类中,而普通函数则不需要。
(4) 普通函数作为友元的关键点包括:在类中声明友元函数,函数定义中不需要使用类作用域解析符(::),在函数定义中可以直接访问类的私有成员,调用时不需要通过对象调用。
阅读全文