02/10/2018, 14:19
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 ...
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
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.
- 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;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #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