【发布时间】:2014-01-22 08:52:09
【问题描述】:
给定基类和派生类如下:
基地:
class AA
{
public:
AA() = default;
virtual void print() const { std::cout << aa << "\n";}
private:
std::string aa = "AA";
};
派生:
class BB : public AA
{
public:
BB() = default;
virtual void print() const override {std::cout << bb << "\n"; }
private:
std::string bb = "BB";
};
第一次尝试:
int main()
{
AA aa; BB bb;
AA& //r = aa; r.print();
r = bb;
r.print();
return 0;
}
结果正是我所期望的:
BB
Press <RETURN> to close this window...
但第二次尝试// 被删除:
int main()
{
AA aa; BB bb;
AA& r = aa; r.print();
r = bb;
r.print();
//!^^^^^^^^^^--why wasn't the print in derived class called?
return 0;
}
输出是:
AA
AA
Press <RETURN> to close this window...
如上所述,为什么在执行第二个r.print()时没有调用派生类中定义的print?
【问题讨论】:
标签: c++ inheritance dynamic-binding