Str=p2; // error: vì str là cont rỏ hằng nên không thể trỏ đi chỗ khác được

Một phần của tài liệu LẬP TRÌNH HƯỚNG đối TƯỢNG – OBJECT (Trang 65)

- Cấu trúc lặ p

6. str=p2; // error: vì str là cont rỏ hằng nên không thể trỏ đi chỗ khác được

Con trỏ tới hằng (pointer to const): là con trỏ trỏ tới một đối tượng hằng, tức là với con trỏ đó, đối tượng được "hiểu" là hằng. Con trỏ này có thể đọc (read) dữ liệu của đối tượng nhưng không được sửa đổi (write) nội dung của đối tượng. Mọi nỗ lực sửa đổi nội dung của đối tượng sẽ gây ra lỗi biên dịch.Con trỏ tới hằng khác con trỏ hằng ở hai điểm: thứ nhất, khi không thích trỏ tới đối tượng này nó có thể trỏ tới đối tượng khác, con trỏ hằng không được phép làm điều này. Thứ hai, con trỏ tới đối tượng hằng (pointer to constant) thì nó hiểu đối tượng là hằng, và không được phép “ghi” dữ liệu lên đối tượng, còn con trỏ hằng nó vẫn cho phép thao tác trên dữ liệu, nó hoàn toàn giống con trỏ bình thường ngoài việc nó chỉ trỏ tới một địa chỉ cố định.

Khi ta đặt từ khóa const trước một khai báo con trỏ thông thường thì điều đó khiến

con trỏ “hiểu” đối tượng là hằng chứ không phải con trỏ là hằng. Nghĩa là nó chỉ có thể “đọc” dữ liệu từ đối tượng nhưng không thể “ghi” dữ liệu lên đối tượng. Trong trường hợp này nó là con trỏ đến đối tượng hằng (pointer to const). Tuy nhiên đối tượng không

phải là trở thành hằng, mà nó chỉ được con trỏ đó “hiểu là hằng” (chỉ là là hằng đối với con trỏ đó), đối với con trỏ khác nó có thể là biến. Để hiểu rõ hơn ta xem xét ví dụ sau: C++ Code:

1. char str[]="Hello, Ajinomoto"; // str là con trỏ hằng, nhưng str[i] thì không

2. const char* p=str; // con trỏ p (pointer to const) trỏ đến đầu mảng str, và p

66 Hướng dẫn lập trình hướng đối tượng với C++_ first_pace Hướng dẫn lập trình hướng đối tượng với C++_ first_pace

3. p[3]='X'; // Error: không được, vì p chỉ được đọc dữ liệu chứ không được ghi dữ liệu lên str[i] liệu lên str[i]

4. str[3]='X'; // Ok: vì str[i] chỉ được coi là hằng theo “cách hiểu” của p, với str thì các str[i] vẫn là biến str thì các str[i] vẫn là biến

Để khai báo một con trỏ hằng ta phải sử dụng *const chứ không phải const. Xem xét ví

dụ sau: C++ Code:

Một phần của tài liệu LẬP TRÌNH HƯỚNG đối TƯỢNG – OBJECT (Trang 65)

Tải bản đầy đủ (PDF)

(72 trang)