30/09/2018, 22:14
Kế thừa trong C++ với một số ý nhỏ
Mình có 2 class sau:
class A {
private:
char* name;
protected:
A() {
name = new char[15];
}
~A() {
delete(name);
}
}
class B: public A{
private:
char* name;
public:
B():A() {// chỗ này là như thế nào nhỉ, có phải phải có thế này thì hàm khởi tạo mặc định của lớp A //mới được gọi không?
name = new char[15];
}
~B() {
delete(name);
}
}
int main() {
B *p = new B();
delete(p);
getch();
return 0;
}
Một câu hỏi mình viết trong code.
Câu hỏi hai à khi hủy đối tượng của lớp B thì hai hàm hủy sẽ đươc gọi theo thứ tự nào A rồi đến B hay B rồi đến A;
Mong các bạn giải đáp giúp mình nhé!
Bài liên quan
Indent code lại cho dễ nhìn đi bạn.
Làm thế nào bạn. Indent code ấy.
Chỗ này có hay không có A() thì hàm khởi tạo mặc định cũng sẽ được gọi.
Hàm hủy của B sẽ được gọi trước, sau đó tới A.
Lần sau bạn có thể tự mình tìm ra câu trả lời trước khi hỏi. Ví dụ câu số 2 đi, bạn có thể viết cho destructor của class A in ra một dòng gì đó khi đc gọi, tương tự cho destructor của B. Khi chạy thì bạn có thể xem dòng nào in trước để biết hàm nào được gọi trước.
ừ thực ra lúc mình đăng câu hỏi thì mình hơi biếng (cái câu hai không cần thiết lắm) vấn đề là tiện thể mình đăng lên là hỏi với câu đầu tiên ấy, mục đích thật sự của việc gọi hàm constructor A() ấy vào constructor B() là để làm gì: cũng vẫn là cái đoạn B():A(){…} ấy. Tại mình tìm mãi mà không thấy? Hỏi các bạn cho nhanh.
Peace!
Theo như trí nhớ trong C++ có quy định.
Hàm khởi tạo mặc định của lớp con sẽ ghi luôn hàm khởi tạo của lớp cha.
Nên ghi như vậy là đúng cú pháp của C++.
Còn muốn giải thích thêm nữa thì không biết. Vì cái này giống như mặc định trong C++ rồi.
Như mình nói, nếu không ghi vẫn được. Còn ghi để rõ ràng hơn thôi bạn.
thank gúy nhưng nếu bạn nào có thêm ý bổ sung thì cứ trả lời nhé