Possible Duplicate:
C++: overriding public\private inheritancechức năng ảo tư nhân ở có nguồn gốc lớp
class base {
public:
virtual void doSomething() = 0;
};
class derived : public base {
private: // <-- Note this is private
virtual void doSomething()
{ cout << "Derived fn" << endl; }
};
Bây giờ nếu tôi làm như sau:
base *b = new child;
b->doSomething(); // Calls the derived class function even though that is private
Câu hỏi:
- Nó có thể gọi hàm lớp có nguồn gốc mặc dù nó là riêng tư. Sao có thể như thế được?
Bây giờ nếu tôi thay đổi specifier truy cập thừa kế từ công chúng để bảo vệ/tin, tôi nhận được một lỗi biên dịch:
'type cast' : conversion from 'Derived *' to 'base *' exists, but is inaccessible
Lưu ý: Tôi biết các khái niệm của specifiers truy cập thừa kế. Vì vậy, trong trường hợp thứ hai là nó có nguồn gốc tư nhân/bảo vệ, nó không thể tiếp cận. Nhưng tôi tự hỏi về câu trả lời cho câu hỏi đầu tiên. Bất kỳ đầu vào sẽ được đánh giá cao.
Tôi nghĩ rằng anh ấy muốn biết tại sao trình xác định truy cập hoạt động theo cách đó thay vì biết nguồn gốc của lỗi là gì. – Hossein