Phần 0: Giới thiệu
Cuốn sách kinh điển tổng hợp và mô tả những điều nên làm hoặc nên tránh trong quá trình phát triển phần mềm với C++ Một số thuật ngữ cần lưu ý:
-
Một declaration (Khai báo) chỉ cho compiler (trình biên dịch) biết về name (tên) và type (kiểu) của một object (đối tượng), function (hàm), class (lớp) mà không đưa ra mô tả chi tiết
-
Ngược lại, một definition (định nghĩa) đưa ra mô tả chi tiết cho trình biên dịch (compiler). Ví dụ với một object, compiler sẽ biết khởi tạo object, cấp phát bộ nhớ ở đâu, với function hoặc function template, một definition sẽ cung cấp phần thân hàm (code body). Với class hay class template definition sẽ là các member functions hoặc trường bên trong class hoặc template
Constructor – Hàm khởi tạo.
Default Constructor – Hàm khởi tạo mặc định là hàm khởi tạo đc gọi mà không cần bất kỳ tham số nào ( không có tham số hoặc nhận giá trị mặc định cho mọi tham số ). Thông thường nếu muốn khai báo mảng của 1 đối tượng thì cần có default constructor.
Để tạo mảng của đối tượng ko có hàm khởi tạo mặc định, ta có thể định nghĩa mảng của pointer (con trỏ), sau đó khởi tạo từng con trỏ với từ khóa new:
Copy constructor được dùng để khởi tạo một đối tượng sử dụng 1 đối tượng khác có cùng kiểu (type):
Initialization – Khởi tạo (object). Object’s initialization xảy ra khi object được gán giá trị ngay khi khai báo đầu tiên. Assignment – Gán (object). Object’s assignment xảy ra khi một object đã được khởi tạo và được gán giá trị mới:
Có thể hiểu sự khác nhau giữa initialization mà assignment nằm ở việc initialization được thực hiện bằng cách gọi constructor, trong khi với assignment là operator=
Client – là 1 người sử dụng code mà ta đã viết
Casting – ép kiểu
- const_cast dùng để loại bỏ tính constness của đối tượng hoặc con trỏ
- dynamic_cast dùng cho “safe downcasting”
- reinterpret_cast dùng để casting giữa các kiểu con trỏ hàm (ít dùng)
- static_cast catch-all cast, dùng khi những kiểu casting khác ko phù hợp