Tôi có hai lớp, với hai lớp toàn cầu friend oparator<<
s.Nhà khai thác và đa hình toàn cầu
class A {
friend std::ostream& operator<<(std::ostream& o, const A &a);
};
class B: public A {
friend std::ostream& operator<<(std::ostream& o, const B &b);
};
Nếu tôi sử dụng nó như thế này, mọi thứ đang làm việc tốt, phiên bản B
của người điều khiển được gọi là:
B b;
std::cout << b;
Nhưng nếu tôi sử dụng polymorpism, phiên bản A
được gọi là, mặc dù động loại là B
:
A* b = new B();
std::cout << *b;
Một giải pháp được đúc:
std::cout << static_cast<B&>(*b);
nhưng có giải pháp đơn giản hay thanh lịch hơn cho việc này không?
Điều gì về việc gọi hàm ảo trong toán tử '<< (std :: ostream &, A const &)'? – dyp