SlideShare une entreprise Scribd logo
1  sur  2
Télécharger pour lire hors ligne
Hàm Bạn và Lớp Bạn
Hàm bạn: Nếu một thành viên của lớp được quy định là private hoặc protected thì chỉ
có các hàm thành viên của lớp mới có quyền truy cập đến nó. Nếu một phương thức
không phải là thành viên của lớp muốn truy cập đến, thì nó phải là hàm bạn của lớp đó.
Phương thức bạn có thể được khai báo nhờ từ khóa friend.
Ví dụ Kết quả
#include using namespace std;
class Rectangle
{
private:
int w;
int h;
public:
Rectangle(int, int);
friend int Area(Rectangle);
};
Rectangle::Rectangle(int w, int h){
this->w = w;
this->h = h;
}
int Area(Rectangle rec){
return (rec.w*rec.h);
}
int main()
{
Rectangle rec(2, 5);
cout<
return 0;
}
10
Giải thích: Hàm Area là một hàm toàn cục, nó không phải là thành viên của lớp (vì
không sử dụng toán tử phạm vi khi khai báo). Nếu bạn cố tình truy cập đến các dữ liệu
w và h thì chương trình dịch sẽ báo lỗi, bởi chúng được quy định là private. Khi ta khai
báo hàm Area là hàm bạn, nó sẽ giải quyết vấn đề này.
Lớp bạn: Nếu ta có hai lớp A và B, và khai báo rằng B là bạn của A, thì khi đó, các
phương thức của lớp A có thể truy cập đến các thuộc tính private và protected của lớp
B.
Ví dụ Kết quả
#include using namespace std;
class Rectangle
Square: 5×5
{
private:
int w;
int h;
public:
Rectangle(int, int);
friend class MakeSquare;
};
class MakeSquare{
private:
int w;
int h;
public:
MakeSquare(Rectangle);
void ShowSquare(void);
};
MakeSquare::MakeSquare(Rectangle rec){
this->w = max(rec.w, rec.h);
this->h = max(rec.w, rec.h);
}
void MakeSquare::ShowSquare(void){
cout<<”Square: “<<<”x”<
}
int main()
{
Rectangle rec(2, 5);
MakeSquare mk(rec);
mk.ShowSquare();
return 0;
}
Giải thích: Lớp Rectangle được quy định là lớp bạn của lớp Square, do đó, lớp Square
có quyền truy cập đến các thuộc tính private và protected của lớp Rectangle. Hàm tạo
của lớp Square truy cập đến các dữ liệu thành viên của lớp Rectangle để lấy chiều dài
và chiều rộng của đối tượng rec (dù chúng là private), để tạo nên đối tượng mk. Đối
tượng Square được tạo mới với cạnh của nó là số đo lớn nhất các cạnh của đối tượng
Rectangle.
Bạn cũng lưu ý rằng A là bạn của B, thì không có nghĩa là B cũng là bạn của A. Như
vậy, tình bạn có thể là một chiều hoặc hai chiều tùy thuộc vào sự quy định của người
lập trình.

Contenu connexe

En vedette

PCI Magazine May, 2010 Total Door Green Tech
PCI Magazine May, 2010 Total Door Green TechPCI Magazine May, 2010 Total Door Green Tech
PCI Magazine May, 2010 Total Door Green TechMike Kelly
 
Producto 1 unidad i elizabeth moreno semana14 18agosto2014
Producto 1 unidad i elizabeth moreno semana14 18agosto2014Producto 1 unidad i elizabeth moreno semana14 18agosto2014
Producto 1 unidad i elizabeth moreno semana14 18agosto2014Elizabeth Moreno Aguilar
 
London, Sarah Resume, 2015
London, Sarah Resume, 2015London, Sarah Resume, 2015
London, Sarah Resume, 2015Sarah London
 

En vedette (9)

iRviN pOrtFoliO 18
iRviN pOrtFoliO 18iRviN pOrtFoliO 18
iRviN pOrtFoliO 18
 
Netiqueta
NetiquetaNetiqueta
Netiqueta
 
Secondo esempio
Secondo esempioSecondo esempio
Secondo esempio
 
HITS FIRST Experience Letter
HITS FIRST Experience LetterHITS FIRST Experience Letter
HITS FIRST Experience Letter
 
PCI Magazine May, 2010 Total Door Green Tech
PCI Magazine May, 2010 Total Door Green TechPCI Magazine May, 2010 Total Door Green Tech
PCI Magazine May, 2010 Total Door Green Tech
 
Producto 1 unidad i elizabeth moreno semana14 18agosto2014
Producto 1 unidad i elizabeth moreno semana14 18agosto2014Producto 1 unidad i elizabeth moreno semana14 18agosto2014
Producto 1 unidad i elizabeth moreno semana14 18agosto2014
 
Configuración de word
Configuración de word Configuración de word
Configuración de word
 
abhi resume
abhi resumeabhi resume
abhi resume
 
London, Sarah Resume, 2015
London, Sarah Resume, 2015London, Sarah Resume, 2015
London, Sarah Resume, 2015
 

Friend function

  • 1. Hàm Bạn và Lớp Bạn Hàm bạn: Nếu một thành viên của lớp được quy định là private hoặc protected thì chỉ có các hàm thành viên của lớp mới có quyền truy cập đến nó. Nếu một phương thức không phải là thành viên của lớp muốn truy cập đến, thì nó phải là hàm bạn của lớp đó. Phương thức bạn có thể được khai báo nhờ từ khóa friend. Ví dụ Kết quả #include using namespace std; class Rectangle { private: int w; int h; public: Rectangle(int, int); friend int Area(Rectangle); }; Rectangle::Rectangle(int w, int h){ this->w = w; this->h = h; } int Area(Rectangle rec){ return (rec.w*rec.h); } int main() { Rectangle rec(2, 5); cout< return 0; } 10 Giải thích: Hàm Area là một hàm toàn cục, nó không phải là thành viên của lớp (vì không sử dụng toán tử phạm vi khi khai báo). Nếu bạn cố tình truy cập đến các dữ liệu w và h thì chương trình dịch sẽ báo lỗi, bởi chúng được quy định là private. Khi ta khai báo hàm Area là hàm bạn, nó sẽ giải quyết vấn đề này. Lớp bạn: Nếu ta có hai lớp A và B, và khai báo rằng B là bạn của A, thì khi đó, các phương thức của lớp A có thể truy cập đến các thuộc tính private và protected của lớp B. Ví dụ Kết quả #include using namespace std; class Rectangle Square: 5×5
  • 2. { private: int w; int h; public: Rectangle(int, int); friend class MakeSquare; }; class MakeSquare{ private: int w; int h; public: MakeSquare(Rectangle); void ShowSquare(void); }; MakeSquare::MakeSquare(Rectangle rec){ this->w = max(rec.w, rec.h); this->h = max(rec.w, rec.h); } void MakeSquare::ShowSquare(void){ cout<<”Square: “<<<”x”< } int main() { Rectangle rec(2, 5); MakeSquare mk(rec); mk.ShowSquare(); return 0; } Giải thích: Lớp Rectangle được quy định là lớp bạn của lớp Square, do đó, lớp Square có quyền truy cập đến các thuộc tính private và protected của lớp Rectangle. Hàm tạo của lớp Square truy cập đến các dữ liệu thành viên của lớp Rectangle để lấy chiều dài và chiều rộng của đối tượng rec (dù chúng là private), để tạo nên đối tượng mk. Đối tượng Square được tạo mới với cạnh của nó là số đo lớn nhất các cạnh của đối tượng Rectangle. Bạn cũng lưu ý rằng A là bạn của B, thì không có nghĩa là B cũng là bạn của A. Như vậy, tình bạn có thể là một chiều hoặc hai chiều tùy thuộc vào sự quy định của người lập trình.