Một câu hỏi nhỏ về tạo đối tượng. Nói rằng tôi có hai loại cổ phiếu này:Thứ tự các nhà thầu/người hủy cuộc gọi trong kế thừa
struct A{
A(){cout << "A() C-tor" << endl;}
~A(){cout << "~A() D-tor" << endl;}
};
struct B : public A{
B(){cout << "B() C-tor" << endl;}
~B(){cout << "~B() D-tor" << endl;}
A a;
};
và trong chính tôi tạo ra một thể hiện của B
:
int main(){
B b;
}
Lưu ý rằng B
xuất phát từ A
và cũng có một lĩnh vực loại A
.
Tôi đang cố gắng tìm ra các quy tắc. Tôi biết rằng khi xây dựng một đối tượng đầu tiên gọi hàm khởi tạo của nó, và ngược lại khi hủy.
Còn trường nào (A a;
trong trường hợp này)? Khi B
được tạo, khi nào nó sẽ gọi hàm tạo của A
? Tôi đã không xác định một danh sách khởi tạo, có một số loại danh sách mặc định? Và nếu không có danh sách mặc định? Và cùng một câu hỏi về phá hoại.
Ví dụ của bạn có thể giải thích rõ hơn nếu thông điệp của bạn cho trình phá hủy khác với thông điệp của bạn cho hàm tạo. Ngoài ra, những gì đang có 'std :: sort' đang làm gì? – Tom
Ngoài ra, khi thử nghiệm, so sánh việc xây dựng và phá hủy 'B b',' B * b = new B(); xóa b; 'và' A * a = new b(); delete a; '(So sánh những gì xảy ra khi bạn sử dụng từ khóa' virtual' cho hàm hủy của bạn, tức là 'virtual ~ A() {cout <<" A D-tor "<< endl;}') – Tom
@Tom, Bạn là đúng. Loại bỏ lỗi trình biên dịch. – iammilind