天天看點

011--C++養成之路(運算符重載:友元)

筆記:友元函數,友元類的介紹。
#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