【发布时间】:2010-06-21 05:24:37
【问题描述】:
我有一个指向派生类对象的基类指针。我在下面的代码中使用两种不同的方式调用foo() 函数。为什么在第一种情况下会调用Derived::foo()? (*obj).foo() 不应该调用 Base::foo() 函数,因为它已经被取消引用了吗?
class Base
{
public:
Base() {}
virtual void foo() { std::cout << "Base::foo() called" << std::endl; }
virtual ~Base() {};
};
class Derived: public Base
{
public:
Derived() : Base() {}
virtual void foo() { std::cout << "Derived::foo() called" << std::endl; }
virtual ~Derived() {};
};
int main() {
Base* obj = new Derived();
// SCENARIO 1
(*obj).foo();
// SCENARIO 2
Base obj1 = *obj;
obj1.foo();
return 0;
}
【问题讨论】:
标签: c++ inheritance