??????????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()??????“???”??????????????鸚????--??????????麯????????????????????????????ú????????