Được rồi vì vậy tôi đã làm việc trên một công cụ trò chơi và tôi đang gặp sự cố ... Hiện tại tôi có một hệ thống phân cấp các lớp (image-> animation-> object) tất cả đều có phương thức get_type()
và tôi đang gặp vấn đề này:Lẫn lộn thừa kế
nếu tôi khai báo một lớp có nguồn gốc sử dụng từ khóa mới, hoặc tĩnh, tôi nhận được kết quả mong muốn:
object instance;
cout << instance.get_type(); //returns an int value
object* pointer = new(object);
cout << pointer->get_type();
Từ đoạn code trên, giao diện điều khiển đầu ra 3. Phương thức được khai báo như vậy trong đối tượng:
Hình ảnh Class:
class image{
public:
virtual int get_type();
};
int object::get_type(){
return 1;
}
Animation Class:
class animation: public image{
public:
virtual int get_type();
};
int animation::get_type(){
return 2;
}
Object Class:
class object: public animation{
public:
virtual int get_type();
};
int object::get_type(){
return 3;
}
Bây giờ vấn đề nảy sinh khi tôi làm điều gì đó như thế này:
object* t = &object();
cout << t->get_type();
Kết quả tại là 1.
Nếu tôi loại bỏ các từ khóa ảo từ việc khai báo lớp của đối tượng lớp, nó hoạt động như tôi mong đợi (các bit cuối cùng của mã trả về 3)
Câu hỏi: làm thế nào tôi có thể sử dụng các phương pháp ảo của tôi từ đối tượng * con trỏ mà không sử dụng từ khóa mới? Lý do là, tôi đang làm một vector với các con trỏ tới các đối tượng này và tạo ra chúng như tôi thêm họ, vì vậy tôi hy vọng có thể làm điều gì đó như sau:
vector<object*> objects; //not imgs or animations
for (int a = 0; a < 20; a++){
objects.push_back(&object());
}
Và có bất kỳ đối tượng [x ] -> get_type(); trả lại loại chính xác loại. Lý do cho việc này là hệ thống sự kiện mà tôi đang sử dụng trong trò chơi của mình cần loại lớp khởi tạo ...
TLDR; Tôi thực sự bốc mùi thừa kế, bạn có thể giúp đỡ không?
Câu hỏi về người mới này cũng được hỏi. – sharptooth