友元类:在A类中声明B类是它的朋友,B类中定义A类的对象,那么在B类中通过该对象可以实现对A类私有数据的访问
#include<iostream>
using namespace std;
class A {
public :
//A将B认作为自己的朋友,B类中的函数可以直访问A类的私有数据
friend class B;
private:
int x;
};
class B {
public:
void set(int i);
void display();
private:
A a;
};
void B::set(int i) {
a.x = i;
}
void B::display()
{
cout << a.x<<endl;
}
int main() {
B b;
b.set(3);
b.display();
return 0;
}
//注:友元关系不能传递 单向 不能继承
友元函数:可以在类的外部通过对象使用类的私有数据成员
#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
Point(int x, int y) :x(x), y(y) {}
int getX() { return x; }
int getY() { return y; }
~Point();
friend float dist(Point p1, Point p2);//友元函数的声明
private:
int x, y;
};
Point::~Point(){}
//友元函数的实现,可以在类的外部通过对象使用类的私有数据成员
float dist(Point p1, Point p2) {
double x = p1.x - p2.x;
double y = p1.y - p2.y;
// static_cast<new_type> (expression) 强制类型转换
return static_cast<double>(sqrt(x*x + y*y));
}
int main()
{
Point p1(1, 2), p2(4, 6);
cout<<dist(p1,p2)<<endl;
return 0;
}