int main () {
CSquare sqr;
CRectangle rect;
sqr.set_side(4);
rect.convert(sqr);
cout << rect.area();
return 0;
}
16
Trong ví dụ này chúng ta đã khai báo
CRectangle
là bạn của
CSquare
nên
CRectangle
có thể truy xuất vào các thành viên
protected
and
private
của
CSquare
, cụ thể hơn là
CSquare::side,
biến định nghĩa kích thước của hình
vuông.
Bạn có thể thấy một điều mới lạ trong chương trình, đó là phần khai báo mẫu
rỗng của lớp
CSquare
, điều này là cần thiết vì bên trong phần khai báo của
CRectangle
chúng ta tham chiếu đến
CSquare
(như là một tham số trong
convert()
). Phần định nghĩa đầy đủ của
CSquare
được viết ở sau.
Chú ý rằng tình bạn giữa hai lớp có thể không như nhau nếu chúng ta không chỉ
định. Trong ví dụ này
CRectangle
được coi là bạn của
CSquare
nhưng đối với
CRectangle
thì không. Bởi vậy
CRectangle
có thể truy xuất vào các thành viên
protected
và
private
của
CSquare
nhưng điều ngược lại là không đúng. Tuy
nhiên chẳng có gì cấm đoán chúng ta khai báo
CSquare
là bạn của
CRectangle
.