25/05/2018, 13:44

Phạm vi truy xuất

Các thành phần (thuộc tính và phương thức) của lớp có thể khai báo là private hoặc public theo mẫu: private: // Khai báo các thành phần riêng của lớp public: // Khai báo các thành phần chung (công cộng) Các ...

Các thành phần (thuộc tính và phương thức) của lớp có thể khai báo là private hoặc public theo mẫu:

private:
    // Khai báo các thành phần riêng của lớp
    public:
    // Khai báo các thành phần chung (công cộng)
    
Các thành phần khai báo mặc định (không dùng các từ khoá private và public) được xem là các thành phần private.

Chỉ được sử dụng trong phạm vi của lớp (trong thân các phương thức của lớp). Chúng không thể đem ra sử dụng bên ngoài lớp.

+ Một thuộc tính private: Thuộc tính này (của một đối tượng nào đó) chỉ có thể được sử dụng trong thân của các phương thức cùng lớp.

+ Một phương thức private: Chỉ được sử dụng trong thân của các phương thức cùng lớp.

Ví dụ sau minh hoạ cách dùng phương thức private. Xét lớp PS (phân số) với 2 thuộc tính nguyên là t (tử) và m (mẫu). Giả sử cần xây dựng các phương thức để thực hiện các phép toán cộng trừ, nhân, chia phân số. Do các phép toán này cần dùng trong toàn bộ chương trình, nên các phương thức thực hiện các phép toán cần khai báo là public. Để thực hiện các phép tính trên phân số cần dùng đến phép rút gọn phân số. Ta có thể dùng một phương thức private để làm điều này vì việc rút gọn chỉ dùng trong nội bộ lớp.

Có phạm vi sử dụng trong toàn chương trình. Như vậy nếu một thuộc tính được khai báo là public, thì nó có thể được truy nhập trong thân của bất kỳ hàm nào trong chương trình.

Ví dụ trong §6 đã chỉ ra phương án dùng một hàm (tự do) để thực hiện phép cộng 2 số phức như sau là sai:

Phương án 3: Dùng hàm tự do

class SP
    {
    private:
    double a; // Phần thực
    double b; // Phần ảo
    public:
    ...
    } ;
    SP cong(SP u1, SP u2)
    {
    SP u:
    u.a = u1.a + u2.a ;
    u.b = u1.b + u2.b ;
    return u;
    }
    

Tuy nhiên nếu sửa chữa bằng cách khai báo các thuộc tính a và b là public thì lại được.

Nhận xét: Các thuộc tính thường khai báo là private để đảm bảo tính dấu kín, an toàn dữ liệu của lớp.

0