Cùm tìm hiểu về Friend class và Friend function trong C++. Bạn sẽ biết khái niệm friend trong C++ là gì, Lớp bạn (Friend class) và Hàm bạn (Friend function) trong C++ là gì cũng như cách sử dụng chúng sau bài học này.
Friend trong C++ là gì
Trong class C++, chúng ta sử dụng các access modifier để quyết định quyền truy cập vào các dữ liệu chứa trong nó, trong đó cần chú ý nhất là public - quyền truy cập công khai và private- quyền truy cập riêng tư.
Ví dụ đối với một biến thành viên của class ở dạng private, khi đó chúng ta chỉ có thể truy cập vào nó ở bên trong phạm vi class mà thôi. Do nó là riêng tư, không công khai nên chúng ta không thể truy cập từ ngoài class vào biến đó được.
Vấn đề đặt ra là, khi cần phải truy cập một biến riêng tư từ bên ngoài, mà không muốn thay đổi quyền truy cập tới biến đó thì chúng ta cần phải làm thế nào? Và đó là lý do mà chức năng Friend trong C++ đã ra đời.
Friend là một chức năng rất quan trọng trong C++, giúp cho phép một hàm hay một class có quyền truy cập vào một thành viên riêng tư của một class khác.
Nhờ có chức năng friend mà các hàm và class có thể dùng chúng dữ liệu riêng tư của một class có sẵn, qua đó rút gọn thời gian viết code và nâng cao hiệu suất phát triển phần mềm.
Lớp bạn (Friend class) trong C++
Khái niệm và cú pháp lớp bạn (Friend class) trong C++
Giống như vậy, một friend class trong C++ hay còn gọi là lớp bạn trong C++, chính là một class có quyền truy cập vào một thành viên riêng tư (private) của một class khác.
Để chỉ định một class làm lớp bạn của một class sẵn có, chúng ta viết cụm từ khóa friend class và tên của friend class này vào class sẵn có, với cú pháp sau đây:
class BaseClass
{
friend class FriendClass;
};
class FriendClass
{
};
Trong đó BaseClass
là class ban đầu, và FriendClass
là lớp bạn của nó.
Ví dụ cụ thể:
/*Khai báo class nguồn*/ |
Trong ví dụ trên, FriendClass là class bạn của BaseClass, do vậy nó có quyền truy cập vào biến private của BaseClass là biến m_b
.
Sử dụng lớp bạn (Friend class) trong C++
Khi sử dụng Lớp bạn (Friend class) trong C++, chúng ta sẽ truy cập vào biến private của lớp nguồn từ lớp bạn.
Để làm được điều đó, chúng ta cần tạo ra các đối tượng (instance) tương ứng của 2 class này, rồi dùng các hàm thành viên của lớp bạn để truy cập vào biến private của lớp nguồn như ví dụ sau đây:
|
Hàm bạn (Friend function) trong C++
Khái niệm và cú pháp hàm bạn (Friend function) trong C++
Tương tự như lớp bạn thì một friend function trong C++ hay còn gọi là hàm bạn trong C++, chính là một hàm có quyền truy cập vào một thành viên riêng tư của một class có sẵn.
Để chỉ định một hàm làm hàm bạn của một class sẵn có, chúng ta viết từ khóa friend đằng trước phần khai báo hàm này vào class nguồn, với cú pháp sau đây:
class MyClass
{
friend void func(MyClass obj);
};
void func(MyClass obj)
{
};
Trong đó MyClass
là tên class ban đầu, obj
là đối tượng tạo bởi class và func
là hàm bạn của class đó.
Lưu ý khi chỉ định tham số của hàm, chúng ta viết func(MyClass obj)
để truyền đối tượng được tạo từ class vào trong hàm. Lý do là để truy cập vào biến private thì cần phải tạo ra đối tượng (instance) chứa biến private đó. Và hàm sẽ thao tác với đối tượng này để truy cập vào biến private.
Sử dụng hàm bạn (Friend function) trong C++
Ví dụ cụ thể:
|
Trong ví dụ trên, FriendClass là class bạn của BaseClass, do vậy nó có quyền truy cập vào biến private của BaseClass là biến m_b
.
Hàm bạn của class nằm trong một class khác
Ở phần trên chúng ta đã học cách dùng một hàm bạn của class khi hàm đó được khai báo độc lập.
Tuy nhiên cũng có những trường hợp hàm bạn này lại được khai báo ở bên trong của một class khác.
Khi đó, ngoài việc chỉ định hàm bạn của class, chúng ta cũng cần phải chỉ định thêm class chứa hàm bạn đó cũng là lớp bạn của class ban đầu.
Ví dụ cụ thể:
|
Nếu chúng ta bỏ qua việc chỉ định class chứa hàm bạn cũng là lớp bạn của class ban đầu, kết quả lỗi chương trình sẽ bị xảy ra.
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn về friend trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.
URL Link
HOME › lập trình c++ cơ bản dành cho người mới học lập trình>>28. hướng đối tượng trong c++