??????????C++???些????????????楹�????????????????校??????????????????些?????????????????写????

????1??C++?械??楹�????virtual function??

?????楹�????C++?????????????polymorphism????????????????????????????????????????????????????????????危?

class A
{
public:
virtual void foo() { cout << "A::foo() is called" << endl;}
};
class B: public A
{
public:
virtual void foo() { cout << "B::foo() is called" << endl;}
};

??????????????????????????

A * a = new B();
a->foo(); // ??????a????????A??????????????????(foo)???B??!

??????????????楹�?????????????????????????????????楹�???????些???睢�??????????谓“???????”????“???????”??????????????貌?????????????????????????????????????????????写??????????????????????????????????????????????????????????“??”??????

?????楹�?????????????????????????????效??????????????????????????????楹�?????????????????

class A
{
public:
virtual void foo();
};
class B: public A
{
virtual void foo();
};
void bar()
{
A a;
a.foo(); // A::foo()??????
}

????1.1 ???

????????????楹�????????????????????????????????????????????危?????????????????????些??

void bar(A * a)
{
a->foo(); // ?????????A::foo() ????B::foo()??
}

???????foo()????楹�??????????bar????????校????????未????????????????????A::foo()????B::foo()???????????????????a??????A??????????A::foo()??????????a??????B??????????B::foo()?????谩?

???????????????????????效????????????“???”??

????1.2 ??????????

?????????????妫�????????????????????????????????????浠�??????????C++????????????????????????????????????????????????????????????????????????????????????????????????????????薪???????????????????????????锟�??????????????????????????????????

?????????????????校???????????????谐?????????????校???????????????????巍???????蔚??????????????????????????????????????写?????????????????????????写????????????????????????????????????????????????????魏蔚?????????????????????????“???”?????????写?????????????????????????????????????????????????????????械?“bad smell”????

??????????????????????????????????????1.1?械??????bar()???A-B??????蔚??????????????????????????卸???????????????????????????????????????????C???A????????????bar()??????“???”??????????????楦�????--??????????楹�????????????????????????????煤????????