01/10/2018, 15:13

Làm sao để gọi phương thức của đối tượng được lưu trong vector?

Mình dùng vector để lưu trữ 1 list các tài liệu (class tailieu là supper) gồm : sách, báo, tạp chí.
Khi nhập, mình debug thấy nhập rất ok.
Nhưng đến đoạn xuất dữ liệu mình đang k biết làm sao để xuất ra. Mỗi class đều override lại hàm xuất của class base( class tailieu), nên khi gọi xuất nếu dùng foreach và biến chạy là auto thì nó sẽ gọi trực tiếp hàm xuất của class base và sẽ k xuất data của subclass, ai có hướng giải quyết chỉ mình với.
Và mình thử gọi hàm bằng cách dùng 1 phần tử của vector như hình mà k được ai biết tại sao k ?
Thanks !

明玉 viết 17:14 ngày 01/10/2018

Không biết phần tử đó của bạn có còn hay không (bị delete hay chưa, pointer có đang là null không) để mà gọi method Xuat()?
Nếu bạn muốn hàm Xuat override hàm Xuat của base class trong mọi trường hợp thì bạn có thể áp dụng polymorphism oop bằng cách thêm từ khóa virtual trước hàm Xuat của base class, tham khảo: https://www.geeksforgeeks.org/virtual-function-cpp/

Nguyen Trong Dung viết 17:23 ngày 01/10/2018

lúc nhập, mình sẽ thực hiện nhập từng thằng 1 vào vector bằng cách nhập data cho 1 đối tượng là con trỏ của class base ( mình gọi là con trỏ đa hình vì dùng đa hình ), mỗi khi nhập mình sẽ yêu cầu ng nhập chọn đối tượng nhập rồi cho con trỏ đa hình tham chiếu tới đối tượng class đó ( = new class ), sau đó dùng con trỏ này gọi tới hàm nhập đã override ở subclass, sau khi nhập xong mình push_back con trỏ đó vào vector và sau đó delete con trỏ đó đi và hỏi ng dùng xem có muốn nhập tiếp k, nếu có sẽ cho con trỏ đó tham chiếu tới class mới cứ như vậy mình add dc các object của subclass vào vector.
giờ mình muốn xuất data từ vector ra mà nếu dùng biến auto thì nó sẽ tham chiếu tới object của supperclass nên sẽ gọi hàm của supperclass chứ k gọi hàm xuất của subclass và k xuất ra data mà sub class có thêm @@

明玉 viết 17:30 ngày 01/10/2018

Rối rắm quá bạn, bạn đưa code tinh gọn nhất mà chạy được lên cho mọi người xem đi

Quân viết 17:26 ngày 01/10/2018

delete con trỏ rồi thì làm sao truy cập lại được nữa. cái này là exception do truy cập vùng nhớ trái phép chứ chả liên quan gì tới câu bạn nói

biến chạy là auto thì nó sẽ gọi trực tiếp hàm xuất của class base và sẽ k xuất data của subclass

Nguyen Trong Dung viết 17:22 ngày 01/10/2018

nó chui vào do while và switch ^^! nên đương nhiên chạy dc r :v chắc ô k hiểu ý

rogp10 viết 17:22 ngày 01/10/2018

dòng 44 trên: list[0] không phải pointer, chả hiểu sao câu này vẫn qua ải.

Mà post hình thì rất là khó soi vì bị cắt khúc ntn.

Quân viết 17:23 ngày 01/10/2018

What of giải thích, có liên quan đến cái mình nói không. Bạn đọc kĩ msg exception hộ cái, đó mới là lỗi. Ngoài ra post code lên đừng chụp ảnh nữa.

James viết 17:20 ngày 01/10/2018

Tại sao bạn lại free đối tượng sau khi push_back ?
Với lại bạn dùng C++ thì dùng toàn C++ đi, tự nhiên lòi ra hàm free của C

Bài liên quan
0