Access modifier trong C++

Bài học hôm nay chúng ta sẽ tìm hiểu về access modifier trong C++? Vậy access modifier trong C++ là gì? Chúng ta sẽ cùng tìm hiểu trong nội dung sau đây.

1. Access modifier trong C++

Access modifier trong C++  được sử dụng để triển khai một tính năng quan trọng của Lập trình hướng đối tượng được gọi là Data Hiding.

Chúng ta cùng xem xét một ví dụ sau: 

Giả sử công ty của chúng ta có lưu trữ thông tin của nhân viên như số điện thoai, email, năm sinh, phòng ban, chức vụ, địa điểm văn phòng làm việc,... Tất cả nhân viên của công ty có thể thấy các thông tin của nhau để tiện liên lạc thông qua trang web intrannet và có tài khoản để đăng nhập.

Người ở ngoài công ty thì không có tài khoản và không thể truy cập vào trang web intrannet để thấy thông tin của nhân viên trong công ty. Chúng ta gọi đó là hidding data.

Access modifier hay Access Specifier trong một lớp được sử dụng để đặt khả năng truy cập của các thành viên lớp. Đó là, nó đặt ra một số hạn chế đối với các thành viên lớp không được truy cập trực tiếp bởi các hàm bên ngoài.

Trong C++ có hổ trợ 3 loại access modifier đó là:

  • Private
  • Public
  • Protected

Lưu ý: Nếu chúng ta không chỉ rõ bất kỳ access modifier cho thành viên của lớp, thì mặc định nó là Private.

Chúng ta sẽ cùng tìm hiểu từng loại access modifier trong C++ nhé.

2. Private access modifier

Các thành viên lớp được khai báo là private thì chỉ có thể được truy cập bởi các hàm bên trong lớp. Chúng không được phép truy cập trực tiếp bởi bất kỳ đối tượng hoặc hàm nào bên ngoài lớp.

Chỉ các hàm thành viên hoặc các hàm bạn mới được phép truy cập các thành viên dữ liệu riêng tư của một lớp. Hàm bạn là gì? Chúng ta sẽ được tìm hiểu trong bài tiếp theo.

Private Access modifier cũng là access modifier mặc định của lớp.

Ví dụ

Chúng ta cùng xem xét một ví dụ đơn giản về private access modifier trong C++ như sau:

Ví dụ
#include<iostream> 
using namespace std; 
  
class HinhTron {    
    private:  
        double banKinh; 
       
    public:     
        double  TinhDienTich() {   
            return 3.14*banKinh*banKinh; 
        } 
}; 
  
int main() {    

    HinhTron ht; 
    // Chung ta thu truy cap du lieu thanh vien private ben ngoai lop
    ht.banKinh = 3.5; 
      
    cout << "Dien tich cua hinh tron la:" << ht.TinhDienTich(); 
    
    return 0; 
} 

Và kết quả sau khi thực thi chương trình trên như sau:

Chương trình trên báo lỗi biên dịch vì chúng ta đang truy cập dữ liệu thành viên bán kính ở dạng private.

Tuy nhiên, chúng ta có thể truy cập gián tiếp các thành viên dữ liệu riêng tư của một lớp bằng cách sử dụng các hàm thành viên công khai của lớp. Chúng ta cùng xem ví dụ sau đây có thể truy cập biến banKinh của lớp HinhTron thông qua hàm TinhBanKinh.

Ví dụ
#include<iostream> 
using namespace std; 
  
class HinhTron {    
    private:  
        double banKinh; 
       
    public:     
        void TinhDienTich(double bk) {
            banKinh = bk;
            double dienTich = 3.14*banKinh*banKinh; 
            cout << "Ban kinh la: " << banKinh << endl;
            cout << "Dien tich la: " << dienTich << endl;
        } 
}; 
  
int main() {    

    HinhTron ht; 
    double banKinh = 2;
    ht.TinhDienTich(banKinh);
    
    return 0; 
}

Và kết quả sau khi thực thi chương trình trên là:

3. Public access modifier

Tất cả các thành viên lớp được khai báo dưới dạng public sẽ có sẵn cho tất cả mọi người. Các thành viên dữ liệu và các hàm thành viên được khai báo public cũng có thể được truy cập bởi các lớp khác.

Các thành viên public của một lớp có thể được truy cập từ bất cứ đâu trong chương trình bằng cách sử dụng toán tử truy cập thành viên trực tiếp (.) với đối tượng của lớp đó.

Ví dụ

Chúng ta cùng xem một ví dụ đơn giản về public access modifier trong C++ như sau:

Ví dụ
#include<iostream> 
using namespace std; 
  
class HinhTron {    
    public:
        double banKinh;
        double  TinhDienTich() {   
            return 3.14*banKinh*banKinh; 
        } 
}; 
  
int main() {    

    HinhTron ht; 
    ht.banKinh = 3.5; 
      
    cout << "Ban kinh cua hinh tron la: " << ht.banKinh << endl;  
    cout << "Dien tich cua hinh tron la:" << ht.TinhDienTich(); 
    
    return 0; 
}

Và kết quả sau khi thực thi chương trình trên như sau:

Trong ví dụ trên, thành viên dữ liệu bán kính là công khai nên chúng ta được phép truy cập bên ngoài lớp.

4. Protected access modifier

Protected access modifier tương tự như private access modifier, sự khác biệt là thành viên lớp được khai báo là Protected không thể truy cập bên ngoài lớp nhưng chúng có thể được truy cập bởi bất kỳ lớp con (lớp dẫn xuất) nào của lớp đó.

Ví dụ

Chúng ta sẽ cùng xem một ví dụ đơn giản về protected access modifier trong C++ như sau:

Ví dụ
#include <bits/stdc++.h> 
using namespace std; 
  
//Lop cha
class Cha {    
    protected: 
        string diaChi;
}; 
 
//Lop con  
class Con : public Cha 
{ 
    public: 
        void ThietLapDiaChi(string dc) { 
            diaChi = dc; 
        } 
          
        void HienThi() { 
            cout << "Dia chi la: " << diaChi << endl; 
        } 
}; 
  
int main() { 
    Con cn; 
    cn.ThietLapDiaChi("Thoi Binh, Ca Mau"); 
    cn.HienThi(); 
    return 0; 
} 

Và kết quả sau khi thực thi chương trình trên như sau:

5. Kết luận

Như vậy là chúng ta đã tìm hiểu xong về access modifier trong C++ là gì rồi. Các bạn biết cách bảo vệ dữ liệu của mình như thế nào rồi đúng không.

Mình khuyến khích các bạn nên thiết lập private cho dữ liệu thành viên, và thiết lập hàm dạng public để truy xuất dữ liệu thành viên đó. Không nên truy xuất một cách trực tiếp dữ liệu thành viên của lớp.

Mình sẽ kết thúc bài học hôm nay ở đây. Bài tiếp theo chúng ta sẽ cùng tìm hiểu về hàm bạn trong C++. Các bạn nhớ theo dõi nhé.

Khóa học nên xem

Nguồn: freetuts.net