Sử dụng hàm bạn (friend) cho 2 Class

Khi bạn khai báo hàm bạn cho 2 class, nếu bạn chưa có kinh nghiệm bạn sẽ dễ gặp lỗi inaccessible.

Dấu hiệu theo ví dụ bên dưới:

  • Bạn đã khai báo friend void test(Matrix a, Vector b); trong class Matrix
  • Bạn đã khai báo friend void test(Matrix a, Vector b); trong class Vector
  • Nhưng chỉ 1 trong 2 truy cập được vùng private

friend

Cách khắc phục

  • Bạn khai báo tên của 2 class Matrix, và Vector ở đầu chương trình chính, sau đó viết nội dung class bên dưới.

friend1

  • Nếu bạn chia file cho từng class, thì hãy làm như sau:

– Trong file .h của file này bạn khai báo class kia, mục đích báo cho trình biên dịch biết class kia có tồn tại.

VD: ở Matrix.h tôi khai báo Class Vector; Và trong Vector.h tôi khai báo class Matrix.h;

Một ví dụ khác đơn giản hơn

#include<iostream>
using namespace std;
class B;                   //defined later
class A;                  //correction (A also need be specified)
void add(A,B);

class A{
    private:
    int a;
    public:
    A(){
        a = 100;
    }
    friend void add(A,B);
};

class B{
    private:
    int b;
    public:
    B(){
        b = 100;
    }
    friend void add(A,B);
};

void add (A Aobj, B Bobj){
    cout << (Aobj.a + Bobj.b);
}

main(){
    A A1;
    B B1;
    add(A1,B1);
    return 0;
}

 

Bạn có thể tham khảo thêm tại đây: http://stackoverflow.com/questions/18404299/can-2-classes-share-a-friend-function

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *