Access modifier trong C++ | Laptrinhcanban.com

Access modifier trong C++

Cùm tìm hiểu về Access modifier trong C++ . Bạn sẽ biết ý nghĩa 3 kiểu Access modifier là public protected private trong C++ cũng như cách sử dụng chúng trong C++ sau bài học này.

Access modifier trong C++ là gì

Access modifier trong C++ là các toán tử có tác dụng chỉ định quyền truy cập đối với các biến và hàm thành viên có trong một class.

Nhờ có Access modifier mà chúng ta có thể quyết định việc một thành phần ở bên ngoài một class có thể truy cập tới các thành viên bên trong class hay không, qua đó bảo vệ được thông tin chứa trong class đó.

Có 3 kiểu Access modifier là public protected private trong C++, tương ứng với chúng là các quyền truy cập được mô tả như bảng dưới đây:

Toán tửTừ trong classTừ class kế thừaTừ ngoài class
publicCó thểCó thểCó thể
privateCó thểKhông thểKhông thể
protectedCó thểCó thểKhông thể

Lưu ý trong chương trình, nếu chúng ta lược bỏ hoặc không chỉ rõ access modifier khi khai báo thành viên của lớp, thì mặc định access modifier Private sẽ được chỉ định.

Public trong C++

Public trong C++ là Access modifier có tác dụng chỉ định thành viên của class có thể được truy cập từ bất cứ đâu trong chương trình.

Public dịch sang tiếng Việt nghĩa là công khai, do vậy tất cả các thành viên của lớp được khai báo dưới dạng public sẽ có thể được truy cập từ bất cứ đâu trong chương trình. Ví dụ như từ bên trong class, bên ngoài class, hoặc trong một class và hàm khác chẳng hạn.

Ví dụ cụ thể, biến num của class TestClass ở dạng public, do vậy nó không những có thể được truy cập và sử dụng từ các hàm bên trong clas, mà còn có thể được truy cập từ hàm func() nằm ngoài class:

#include<iostream>
using namespace std;

class TestClass
{
public:
int num; /*Khai báo biến public num */
TestClass(){num = 100;} /*Hàm khởi tạo*/
void print(){cout << num <<endl;} /*Hàm thành viên*/
};

/*Khai báo hàm bên ngoài class*/
void func(int x){cout << 2*x <<endl;}

int main()
{
/*Truy cập biến num từ hàm print() trong class*/
TestClass obj;
obj.print(); //100

/*Truy cập biến num từ hàm func() ngoài class*/
func(obj.num); //200

return 0;
}

Private trong C++

Private trong C++ là Access modifier có tác dụng chỉ định thành viên của class chỉ có thể được truy cập từ bên trong class mà thôi.

Private dịch sang tiếng Việt nghĩa là riêng tư, do vậy tất cả các thành viên của lớp được khai báo dưới dạng private sẽ được giấu đi với phần bên ngoài class, và chỉ có thể được truy cập từ các hàm thành viên trong class đó mà thôi.

Ví dụ cụ thể, biến num của class TestClass ở dạng private, do vậy nó có thể được truy cập từ hàm bên trong class. Tuy nhiên nếu chúng ta cố truy cập nó từ hàm func() nằm ngoài class, lỗi sẽ bị xảy ra.

#include<iostream>
using namespace std;

class TestClass
{
private:
int num; /*Khai báo biến public num */
public:
TestClass(){num = 100;} /*Hàm khởi tạo*/
void print(){cout << num <<endl;} /*Hàm thành viên*/
};

/*Khai báo hàm bên ngoài class*/
void func(int x){cout << 2*x <<endl;}

int main()
{
/*Truy cập biến num từ hàm print() trong class*/
TestClass obj;
obj.print(); //100

/*Truy cập biến num từ hàm func() ngoài class*/
func(obj.num); //error: ‘int TestClass::num’ is private within

return 0;
}

Lưu ý, nếu chúng ta lược bỏ hoặc không chỉ rõ access modifier khi khai báo thành viên của lớp, thì mặc định access modifier Private sẽ được chỉ định.

Nên cách khai báo biến private ở trên cũng có thể được viết như sau:

class TestClass
{
int num; /*Khai báo biến public num */
public:
TestClass(){num = 100;} /*Hàm khởi tạo*/
void print(){cout << num <<endl;} /*Hàm thành viên*/
};

Protect trong C++

Protect trong C++ là Access modifier có tác dụng chỉ định thành viên của class chỉ có thể được truy cập từ bên trong class và từ các class con (class kế thừa) mà thôi.

Protect dịch sang tiếng Việt nghĩa là bảo vệ, do vậy tất cả các thành viên của lớp được khai báo dưới dạng protect sẽ được bảo vệ, và chỉ cho phép truy cập từ class cũng như các class con của nó mà thôi.

Ví dụ cụ thể, biến num của class TestClass ở dạng protect, do vậy nó có thể được truy cập từ hàm bên trong class, cũng như từ class con của nó. Tuy nhiên nếu chúng ta cố truy cập nó từ hàm func() nằm ngoài class, lỗi sẽ bị xảy ra.

#include<iostream>
using namespace std;

/*Khai báo class*/
class TestClass
{
int num; /*Khai báo biến public num */
public:
TestClass(){num = 100;} /*Hàm khởi tạo*/
void print(){cout << num <<endl;} /*Hàm thành viên*/
};


/*Khai báo class con được kế thừa từ class TestClass*/
class DerivedClass : public TestClass
{
public:
void printNew(int x) {cout << 3*x <<endl;}
};

/*Khai báo hàm bên ngoài class*/
void func(int x){cout << 2*x <<endl;}


int main()
{
/*Truy cập biến num từ hàm print() trong class*/
TestClass obj;
obj.print(); //100

/*Truy cập biến num từ class con*/
DerivedClass obj2;
obj2.print(); //100

/*Truy cập biến num từ hàm func() ngoài class*/
func(obj.num); //error: ‘int TestClass::num’ is private within

return 0;
}

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về Access modifier trong class 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.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.