筆記:友元函數,友元類的介紹。
#include<iostream>//友元函數
#include<string>
using namespace std;
class Point3D;//短式聲明
#if 1
class Point2D{
int m_x;
int m_y;
friend void print(Point2D& point);//友元函數
friend class Point3D;//友元類
friend void print3DF(Point3D& point);
public:
Point2D(int x=0,int y=0):m_x(x),m_y(y){
}
void print(){
cout << "(" << m_x << "," << m_y << ")" << endl;
}
};
void print(Point2D& point){//友元函數可以調用類中的成員變量以及所有東西
cout << "(" << point.m_x << "," << point.m_y << ")" << endl;
}
class Point3D{
friend void print3DF(Point3D& point);//友元函數聲明
int m_z;
Point2D m_p2;
public:
Point3D(int x=0,int y=0,int z=0) :m_p2(x,y),m_z(z){
}
void print3D(){
cout << "(" << m_p2.m_x << "," << m_p2.m_y << "," << m_z << ")" << endl;
}
};
void print3DF(Point3D& point){//友元函數定義
cout << "(" << point.m_p2.m_x << "," << point.m_p2.m_y << "," <<point.m_z << ")" << endl;
}
int main(){
Point2D p21;
p21.print();
Point2D p22(10);
p22.print();
Point2D p23(10,20);
p23.print();
print(p21);
print(p22);
print(p23);
cout << "+++++++++++++++++++++++++++++++++++++++++++++++" << endl;
Point3D p31(2,3,1);
p31.print3D();
print3DF(p31);
getchar();
return 0;
}
#endif