Bài giảng Lập trình hướng đối tượng trong C++ - Phạm Thị Quỳnh - Chương 4: Đối tượng và lớp (Phần 3)
Khi hai lớp được khai báo là bạn của nhau thì các thành phần được định nghĩa trong một lớp sẽ được truy nhập bởi các thành phần ở lớp kia.
Quan hệ bạn được khai báo giữa các lớp hoặc giữa lớp và hàm.
Quan hệ bạn không có tính chất bắc cầu và tính chất giao hoán.
CHƯƠNG 4: ĐỐI TƯỢNG & LỚP (III) Các loại quan hệ 1. Quan hệ bạn Khi hai lớp được khai báo là bạn của nhau thì các thành phần được định nghĩa trong một lớp sẽ được truy nhập bởi các thành phần ở lớp kia. Quan hệ bạn được khai báo giữa các lớp hoặc giữa lớp và hàm. Quan hệ bạn không có tính chất bắc cầu và tính chất giao hoán. Hàm bạn Không hàm nào ở ngoài lớp có thể truy nhập vào các thành phần private hoặc protected (trừ phương thức của lớp kế thừa) của lớp, trừ khi đó là hàm bạn. Hàm có thể truy nhập tới tất cả các thành phần private của lớp mà coi nó là bạn. Ví dụ: Hàm bạn class CRectangle { private: int width, height; public: void set_values (int, int); int area () {return (width * height);} friend CRectangle duplicate (CRectangle); }; void CRectangle::set_values (int a, int b) { width = a; height = b; } CRectangle duplicate (CRectangle rectparam) { CRectangle rectres; rectres.width = rectparam.width*2; rectres.height = rectparam.height*2; return (rectres); } int main () { CRectangle rect, rectb; rect.set_values (2,3); rectb = duplicate (rect); cout << rectb.area(); return 0; } Lớp bạn Khi hai lớp được khai báo là bạn của nhau thì các thành phần được định nghĩa trong một lớp sẽ được truy nhập bởi các thành phần ở lớp kia. Ví dụ: Lớp bạn class CSquare; class CRectangle { private: int width, height; public: int area () {return (width * height);} void convert (CSquare a); }; class CSquare { private: int side; public: void set_side (int a) {side=a;} friend class CRectangle; }; void CRectangle::convert (CSquare a) { width = a.side; height = a.side; } int main () { CSquare sqr; CRectangle rect; sqr.set_side(4); rect.convert(sqr); cout << rect.area(); return 0; } 2. Quan hệ cấu thành C++ cho phép ta xây dựng một lớp mà có các thành phần dữ liệu của nó là các lớp khác. Quan hệ giữa các lớp này được gọi là quan hệ cấu thành. class Product { private: int ID; int Price; public: Product(); Product(int,int); void ShowData(); }; #include "Product.h" class Product; class OrderDetail { private: Product P; int Quantity; public: OrderDetail(); OrderDetail(int,int,int); void ShowData(); void SetOrderDetail(); }; OrderDetail::OrderDetail():P() { Quantity=0; } OrderDetail::OrderDetail(int i, int p, int q):P(i,p) { Quantity=q; } void OrderDetail::ShowData() { P.ShowData(); cout<<" Quantity: "<<Quantity<<endl; }
File đính kèm:
- Bài giảng Lập trình hướng đối tượng trong C++ - Phạm Thị Quỳnh - Chương 4 Đối tượng và lớp (Phần 3).ppt