Hàm bạn-Friend function

      Comments Off on Hàm bạn-Friend function
  • Hàm bạn không phải thành viên của lớp nó được sử dụng khi ta muốn truy cập thành phần private và protected member.
  • Hàm bạn ko phải là thành viên của lớp nên nó ko có con trỏ this, ko bị ảnh hưởng bởi từ khóa access modifier.
  • Mở rộng khái niệm friend cho friend class nữa.

Ví dụ về hàm bạn:

#include<iostream>

class A{
   private: int x;
   public: void show(){
      std::cout << "A::X = "<<x <<std::endl;
   }
   public:A():x(1){
      std::cout <<"A constructor"<<std::endl;
   }
   public:A(A&a){
      std::cout <<"Copy constructor" <<std::endl;
   }

   friend void show1(A&a){
      std::cout << a.x <<std::endl;
   }
   private: friend void show2(A&a);
};
void show2(A &a){
   a.x=10000;
}
int main(){
   A a;
   show1(a);
   show2(a);
   a.show();
   return 0;
}

Ví dụ về lớp bạn:

#include <iostream>

class A{
    friend class B;
    private: int a = 100;
};

class B{
    public: void show(A &o){
        std::cout <<o.a<<std::endl; // Can access private a member due to friend class.
    }
};

int main(){
    A a;
    B b;
    b.show(a);
    return 0;
}