Yêu cầu mọi thông tin sao chép từ blog này phải được ghi rõ đầy đủ: Thông tin được sao chép từ "http://www.dangngochoangthanh.blogspot.com".

Cool wallpaper http://www.fancymessage.com

EMOJI KEYBOARD PRO http://emojiselector.com

THƯ VIỆN HÌNH ĐỘNG FLASH ANIMATION: http://flashanimationlibrary.blogspot.ru/

Hệ thống học trực tuyến đang được phát triển và sẽ đưa vào sử dụng vào cuối năm nay. Hãy xem qua một số demo của Học Trực Tuyến.


HỌC TRỰC TUYẾN ĐÃ CUNG CẤP PHIÊN BẢN TRUY CẬP QUA MOBILE http://dangngochoangthanh.blogspot.com/?m=1

XEM KÊNH HỌC TRỰC TUYẾN TRÊN YOUTUBE



Search on This Blog

Saturday, September 11, 2010

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
{
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;
}
Square: 5×5
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.

1 comment:

  1. bài viết rất hay đang cần tìm hiểu về cái này ^^

    ReplyDelete