Nếu tôi hiểu chính xác, chúng tôi có ít nhất hai cách triển khai bố cục khác nhau. (Trường hợp thực hiện với con trỏ thông minh được loại trừ vì đơn giản tôi hầu như không sử dụng STL và không có mong muốn tìm hiểu nó..)Cách triển khai thành phần lớp trong C++?
Hãy có một cái nhìn tại Wikipedia example:
class Car
{
private:
Carburetor* itsCarb;
public:
Car() {itsCarb=new Carburetor();}
virtual ~Car() {delete itsCarb;}
};
Vì vậy, đó là một cách - chúng tôi có một con trỏ để đối tượng làm thành viên riêng tư. Người ta có thể viết lại nó trông như thế này:
class Car
{
private:
Carburetor itsCarb;
};
Trong trường hợp đó chúng ta có một đối tượng chính nó như là thành viên tư nhân. (Nhân tiện, tôi có quyền gọi thực thể này là một đối tượng từ quan điểm thuật ngữ không?)
Trong trường hợp thứ hai, không bắt buộc phải gọi hàm khởi tạo mặc định (nếu cần gọi hàm dựng không mặc định) có thể làm điều đó trong danh sách initializer) và destructor. Nhưng nó không phải là một vấn đề lớn ...
Và dĩ nhiên trong một số khía cạnh, hai trường hợp này khác nhau đáng kể hơn. Ví dụ, nó bị cấm gọi các phương pháp không const của bộ chế hòa khí từ các phương pháp const của lớp Car trong trường hợp thứ hai ...
Có "quy tắc" nào để quyết định sử dụng quy tắc nào không? Tui bỏ lỡ điều gì vậy?
Tôi nghĩ rằng bạn có nghĩa là "nó bị cấm gọi các phương pháp không const của bộ chế hòa khí từ các phương pháp const của lớp Car". –
@ Laurence Ooops. Dĩ nhiên, bạn phải ... – Wildcat
"[I] không có mong muốn học [STL]." Gì? Bạn đang thiếu một phần lớn của C++ bằng cách bỏ qua STL. – rlbond