Nếu tôi có một lớp cơ sở, chỉ với các phương thức ảo và 2 lớp dẫn xuất từ lớp cơ sở, với những phương thức ảo được triển khai.Con trỏ tới mảng lớp cơ sở, với lớp bắt nguồn
Làm thế nào để:
// causes C2259
BaseClass* base = new BaseClass[2];
BaseClass[0] = new FirstDerivedClass;
BaseClass[1] = new SecondDerivedClass;
hay:
// causes "base is being used without being initialized"
BaseClass* base;
// causes CC59 again
BaseClass* base = new BaseClass;
base[0] = FirstDerivedClass();
base[1] = SecondDerivedClass();
(hoặc một cái gì đó tương tự)
... để tôi có thể truy cập vào BaseClass
s phương pháp thông qua DerivedClass
, nhưng bằng con trỏ và con trỏ là một mảng của DerivedClass
s?
Vấn đề, được gọi là "đối tượng cắt", không phải là cụ thể cho mảng - nó xảy ra bất cứ lúc nào bạn gán một lớp dẫn xuất cho một lớp cơ sở * theo giá trị *. Ví dụ. 'BaseClass b; b = FirstDerivedClass(); 'là compilable C++ mà vẫn phá vỡ âm thầm (tốt nhất bạn có thể nhận được một cảnh báo trình biên dịch). –
Liên kết dường như được di chuyển. – user6003859
@ user6003859 Tôi đã cập nhật nó, cảm ơn vì đã phát hiện ra! – Jon