????2.2 ???麯??

??????????????????????????麯????

class A
{
public:
virtual void foo()=0; // =0???????麯??????麯??
};

????????????????????????麯????????????????????????????????????????麯???????淶?????????????????????ν??“???”????????????????????????????????????

????2.3 ??????????

?????????????????????????????????????磺

class A
{
public:
virtual ~A()=0; // ????????????
};

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

class A
{
public:
A() { ptra_ = new char[10];}
~A() { delete[] ptra_;} // ????????????
private:
char * ptra_;
};
class B: public A
{
public:
B() { ptrb_ = new char[20];}
~B() { delete[] ptrb_;}
private:
char * ptrb_;
};
void foo()
{
A * a = new B;
delete a;
}

??????????????У???????????????????????????У??????delete a?????????????A::~A()???????????B???????????????б????????????е?????£?

?????????????A::~A()???virtual????????B::~B()???delete a???????????????????????????????????virtual???

?????????????????????????????????????????????????????????????????????????????????????????к???????????????黯????????????????????????????????

????2.4 ?鹹????

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

????3???麯????ü???

????3.1 private???麯??

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

class A
{
public:
void foo() { bar();}
private:
virtual void bar() { ...}
};
class B: public A
{
private:
virtual void bar() { ...}
};

??????????????У????bar()??A??????private??????????????????????????У????????????public????protected???麯??????????????Ч?????????????????private???????A::foo()???????B::bar()??????????????B::bar()??A::bar()??override??????????????

????????д???????????A????B?????override???bar()????????????????????????????????????????????