Mã này từ chối in các thông điệp thích hợp vào bảng điều khiển khi tôi chạy nó. Sử dụng con trỏ thay vì tham chiếu dường như hoạt động (-> thay vì.). Tôi mới đến OOP vì vậy tha thứ cho tôi nếu bạn thấy điều này vô lý.Gọi các chức năng ảo thông qua tham chiếu đến lớp cơ sở
#include <iostream>
using namespace std;
class instrument {
public:
virtual void play(){}
};
class drum : public instrument {
public:
void play(){
cout << "dum, dum" << endl;
}
};
class piano : public instrument {
public:
void play(){
cout << "pling" << endl;
}
};
int main(){
instrument i;
piano p;
drum d;
instrument &pi = i;
pi.play(); // -
pi = p;
pi.play(); // pling
pi = d;
pi.play(); // dum, dum
}
Bạn không thể thay đổi tham chiếu từ đối tượng mà tài liệu tham chiếu khi nó bị ràng buộc khi khởi tạo. Ngay bây giờ các toán tử gán nhiệm vụ của bạn (và kích hoạt [đối tượng cắt] (http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274634#274634) trong quá trình này). – WhozCraig
Làm cho câu trả lời đó, đúng không? – jrok
Một vấn đề phụ, nhưng bạn cần tạo một destructor ảo trong lớp cơ sở. –