【发布时间】:2014-08-04 11:40:11
【问题描述】:
考虑以下代码:
class A {
public:
virtual void hello() { std::cout << "Hello from A" << std::endl; }
void hi() { std::cout << "Hi from A" << std::endl; }
};
class B : public A {
public:
void hello() { std::cout << "Hello from B" << std::endl; }
void hi() { std::cout << "Hi from B" << std::endl; }
};
int main() {
A foo = B();
foo.hello(); // prints "Hello from A"
foo.hi(); // prints "Hi from A";
A *bar = new B();
bar->hello(); // prints "Hello from B"
bar->hi(); // prints "Hi from A"
}
我知道,由于hello() 被声明为A 类中的虚函数,所以B 类的任何对象都应该具有被覆盖的行为。但是,为什么对象foo 不调用被覆盖的hello()?
换句话说,这两种对象构造方法在哪些方面不同? A foo = B(); v/s A *bar = new B()?
谢谢!
【问题讨论】:
标签: c++ class virtual-functions