c++怎么将类中友元函数定义与实现分开?
3个回答
展开全部
友元函数在定义和调用上与普通函数一样,不同于成员函数的定义,它不需要指出所属的类。
#include<iostream.h>
class Point
{
public:
Point(double xx,double yy)
{x=xx,y=uu;}
void Getxy();
friend double Distance(Point &a,Point &b);
private:
double x,y;
};
void Point::Getxy()
{ cout<<"("<<x<<","<<y<<")"<<endl;
}
double Distance(Point &a,Point&b)
{ double dx=a.x-b.x;
double dy=a.y-b.y;
double sqrt(dx*dy+dy*dy);
}
void main()
{ Point p1(3.0,4.0),p2(6.0,8.0);
p1.Getxy();
p2.Getxy();
double d=Distance(p1,p2);
cout<<"Distance is"<<d<<endl;
}
结果:
(3.0,4.0)
(6.0,8.0)
Distance is 5
#include<iostream.h>
class Point
{
public:
Point(double xx,double yy)
{x=xx,y=uu;}
void Getxy();
friend double Distance(Point &a,Point &b);
private:
double x,y;
};
void Point::Getxy()
{ cout<<"("<<x<<","<<y<<")"<<endl;
}
double Distance(Point &a,Point&b)
{ double dx=a.x-b.x;
double dy=a.y-b.y;
double sqrt(dx*dy+dy*dy);
}
void main()
{ Point p1(3.0,4.0),p2(6.0,8.0);
p1.Getxy();
p2.Getxy();
double d=Distance(p1,p2);
cout<<"Distance is"<<d<<endl;
}
结果:
(3.0,4.0)
(6.0,8.0)
Distance is 5
更多追问追答
追问
那怎么将其在类中设为内联
追答
友元是类体内的非成员函数,为了区别成员函数,在说明前加friend,但可以访问类中的私有成员,提高了运行效率,但破坏了封装性与隐藏性。
成员函数可分为内联函数和外联函数。内联函数指定义在类体内的成员函数。
内联函数要在调用前定义,无法递归调用。外联变内联,只要在函数头前加关键字inline。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看了你和一楼的争论。它的代码当然会报错因为有语法错误。好多头文件没引用。Distance函数中没写return。
使用这个代码 内联友元函数:
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;
class Point
{ private:
double x,y;
public:
Point(double xx,double yy)
{x=xx,y=yy;}
void Getxy();
friend double Distance(Point &a,Point &b);
};
void Point::Getxy()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
inline double Distance(Point &a,Point&b)
{ double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dy+dy*dy);
}
int main()
{ Point p1(3.0,4.0),p2(6.0,8.0);
p1.Getxy();
p2.Getxy();
double d=Distance(p1,p2);
cout<<"Distance is"<<d<<endl;
system("pause");
return 0;
}
使用这个代码 内联友元函数:
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;
class Point
{ private:
double x,y;
public:
Point(double xx,double yy)
{x=xx,y=yy;}
void Getxy();
friend double Distance(Point &a,Point &b);
};
void Point::Getxy()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
inline double Distance(Point &a,Point&b)
{ double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dy+dy*dy);
}
int main()
{ Point p1(3.0,4.0),p2(6.0,8.0);
p1.Getxy();
p2.Getxy();
double d=Distance(p1,p2);
cout<<"Distance is"<<d<<endl;
system("pause");
return 0;
}
追问
如果将Point放在头文件,Distance放在cpp里面,会报错error LNK2019啊
追答
哎,那是你编译配置的问题。不是代码的问题。我把多文件的源代码发给你,不过我用的是dev c++ 4.9 你下载一个。
//main.cpp
#include
#include
#include
#include "Point.hpp"
using namespace std;
inline double Distance(Point &a,Point&b)
{ double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dy+dy*dy);
}
int main()
{ Point p1(3.0,4.0),p2(6.0,8.0);
p1.Getxy();
p2.Getxy();
double d=Distance(p1,p2);
cout
void Point::Getxy()
{printf("(%g,%g)\n",x,y);
return;}
Point::Point(double xx,double yy)
{x=xx;y=yy;}
//end Point.cpp
//Point.hpp
#ifndef M_POINT
#define M_POINT
#include
#include
#include
class Point
{ private:
double x,y;
public:
Point(double xx,double yy);
void Getxy();
friend double Distance(Point &a,Point &b);
};
#endif
//end Point.hpp
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
友元函数最好是在类中实现,类外实现有时候会出一些问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询