#include <iostream>
using 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()