Shape* p1, * p2; p1 = &A; p2 = &B; cout << "基类指针指向Rectangle类对象,调用calArea():" << p1->Shape::calArea() << endl; cout << "基类指针指向Circle类对象,调用calArea():" << p2->Shape::calArea() << endl; Shape& r1 = A; cout << "Rectangle类对象初始化基类对象引用r,r调用calArea():" << r1.Shape::calArea() << endl; Shape& r = B; cout << "Circle类对象初始化基类对象引用r,r调用calArea():" << r.Shape::calArea() << endl; return 0;为什么不纯在二义性
时间: 2024-01-24 08:18:12 浏览: 64
C++基类指针和派生类指针之间的转换方法讲解
在这段代码中,没有出现二义性,因为所有派生类都实现了基类的虚函数 `calArea()`,因此通过基类指针或引用调用时,会根据指针或引用所指向的具体对象类型,调用相应的实现。同时,在这段代码中,基类的虚函数 `calArea()` 已经被声明为虚函数,因此可以保证在运行时进行动态绑定,调用正确的实现。
阅读全文