问题描述
- 关于友元函数没声明也能运行的问题
- #include
using namespace std;
#include
class point{
private:
int xy;
friend int dist1(point p1point p2);public:
point(int a=10int b=10){ x=a; y=b; }
int getx( ){ return x; }
int gety( ){ return y; }
};
int dist1(point p1point p2){
double x=(p2.x-p1.x);double y=(p2.y-p1.y);
return sqrt(x*x+y*y);
}
int dist2(point p1point p2){double x=p2.getx()-p1.getx();
double y=p2.gety()-p1.gety();
return sqrt(x*x+y*y);
}
void main()
{
point p1(25)p2(420);cout<<dist1(p1p2)<<endl;
cout<<dist2(p1p2)<<endl;
}
为什么dist2这个函数没有声明为友元函数,却也能正常运行?
解决方案
xy不是成员变量 x y,而是局部变量。两者不是一回事。
解决方案二:
一楼的前辈,dist2中也有x,y啊?
解决方案三:
因为getx gety是公有函数,所以本来就能访问,不需要友元。
解决方案四:
如果你写
double x=(p2.x-p1.x);
那么肯定不能编译
解决方案五:
dist2只需p1p2对它公开,getxgety是p1p2的事。你可以反问一下,如果这样都不能访问类的私有成员变量,怎么才能访问?都定义友元来访问吗,那面向的封装特性还剩多少?
时间: 2024-10-01 11:39:31