30/09/2018, 20:39
Thừa kế trong C++?
Ví dụ có class child thừa kế class parent.
E không hiểu tại sao có thể viết parent *p = new child();
ạ?
Bài liên quan
Ví dụ có class child thừa kế class parent.
E không hiểu tại sao có thể viết parent *p = new child();
ạ?
Mình không biết có nhầm không vì cũng lâu lâu không sờ oop
cái kia mình tạo 1 biến con trỏ kiểu parent rồi trỏ tới child();
Cũng tương tự như ;
Nhìn vào hình trên thì thấy size của parent chỉ có 8 bytes, size của child là 16 bytes.
Khi cho con trỏ p (của class parent) trỏ đến vùng nhớ của con trỏ c (của class child)
thì 2 dòng dưới cho ra cùng 1 địa chỉ. Nhưng lúc này, p vẫn sử dụng 8 bytes bắt đầu từ địa chỉ đó, trong khi c sử dụng hết 16 bytes.
Nghĩa là con trỏ p chỉ sử dụng được các thành phần mà kiểu child kế thừa từ p thôi chứ không sử dụng được những gì class child định nghĩa thêm. Muốn sử dụng hết chức năng của class child thì phải ép kiểu của p về child.
p = &c;
chứcó thể hiểu tạm là có thể cho con trỏ lớp mẹ trỏ tới 1 đối tượng lớp con vì con kế thừa từ mẹ tức là có tất có những thuộc tính/phương thức của class mẹ, nên con trỏ class mẹ có thể xem đối tượng class con như là đối tượng class mẹ. ``` Child c; Parent* p = &c; //hợp lệ ```
ngược lại ko đúng: con trỏ class con ko thể trỏ tới 1 đối tương class mẹ được vì có class con sẽ có thêm thuộc tính/phương thức mới khác với lớp mẹ.
Dạ vâng. Chỗ đó em ghi nhầm @@
phải cẩn thận hơn nữa. Ép kiểu phải xài
dynamic_cast
chứ viết(child*)(void*)
làstatic_cast
từ C khá “nguy hiểm” có thể chạy sai đó.ví dụ có thêm class
OtherChild
mà p trỏ tới 1 đối tượng củaOtherChild
này, lại đi ép kiểu thành kiểuChild
kia thì lúc chạy bị lỗi chắc.E thử ví dụ như thế này thì lại bị lỗi ạ
Coi lại tên của constructor
không có constructor a ạ.
E chỉ gọi hàm trong class thôi.
Thế thì coi lại cách khai báo hàm trong class. Kiểu trả về của nó đâu?
sơ suât quá, e quên mất
thế mà Dev-C++ nó vẫn chạy, không báo lỗi như Visual Studio ạ @@
ủa có hả. mình nhớ trong OOP thằng con có thể new được thằng cha. chứ còn thằng cha làm j new được từ thằng con ?
nhớ ngược rồi bạn ơi