#includeusing namespace std; class base { public: virtual void fun() { std::cout << "base::fun()" << std::endl; } }; class Derived : public base { public: virtual void fun() { std::cout << "Derived::fun()" << std::endl; } }; int main(int argc, char *argv[]) { base* d = new Derived; std::cout << " d->fun() call: "; d->fun(); // Derived::fun() auto b = *d; std::cout << " b.fun() call: "; b.fun(); // base::fun() auto &bb = *d; std::cout << " bb.fun() call: "; bb.fun(); // Derived::fun() auto bbb = d; std::cout << " bbb->fun() call: "; bbb->fun(); // Derived::fun() }
输出结果是:
d->fun() call: Derived::fun() b.fun() call: base::fun() bb.fun() call: Derived::fun() bbb->fun() call: Derived::fun()



