????2?????????????????????(protected inheritance)
????class Bulk_item:protected Item_base{...};
?????????е?public??protected??? ???????????protected???
????3???????????????м??(private inheritance)
????class Bulk_item:private Item_base{...};
?????????е?public??protected??? ???????????private???????????????????????????????е??κγ????
????public????????????????????????????????????public????????private??protected?????????????
??????????using ??????????????????????е???????
????class??struct??????????????????????????
????class Base{...};
????class D1:Base{...} ????? class D1:private Base{...}
????struct D2:Base{...} ????? class D2:public Base{...}
????class ?? struct ????????????????????????????????κβ????
??????????????????в????????????????????protected???????????????????????????????protected?????
????void Bulk_item::memfcn(const Bulk_item &d?? const Item_base &b)
????{
????// price is protected
????double ret = price; //ok
????ret = d.price;//ok
????ret = b.price;//error
????}
????2.5 ?????????
???????????????static???????????????в????????????????????
????2.6 ?????е????
????????????????????????????????????????????????????????????????????????C++11???????????????????????final???????С?
????Class NoDerived final{/* */ }
????Class Bad : public NoDerived{/* */ } // error!
????3 ??????????????????
?????????????????????e???????????????????????????壺????????????????????????????????????????????????????????????????????????????????????????????????????
????3.1 ??????????????
????????????????????????????????????????????????????????????????????????????????????????????е???????????????????????в???????????????????????????????????????????????????????
????3.2 ??????????????
??????????????????????
????1?????????????????????????????????????????????????????????????????????????з????κα仯??
????2?????????????????????????????????????????????????????????????л?????????????????????????????????
????3???????????????????????????????????“????”??????
????3.3 ??????????????
??????д???????????????????????????????????????к????????????????г?????????????????????????????????????????????????????????????????
????Bulk_item bulk;
????Item_base *itemP = &bulk; // ok
????Bulk_item *bulkP = itemP; // error
????4 ?麯??
????1????????????????????????????????????C++????????????????????
????2???????е??麯?????????????????????????麯????????????????????麯??????ú?????????е??βα????????????е??β???????
????3??????????????βα???override????????????????е??麯????????final???????????????????и???ú?????
????4???????????????麯????????????????汾??????????????????????????????????????y????????????????汾?????????????????????顣
????double undiscounted = baseP->Quote::net_price(42);
????5???????????????????????????ú??????????????ж?????????Σ??????????е??????????е?????汾???????
????5 ???????
????1?????麯?????βα???=0?????麯????????麯???????麯?????????????壬??????????????????????????????????????塣???????????????????????麯???????壬????????????????????????
????2?????У?????δ??????????У????麯????????????????????????????????????????????????y???????????????????????????
????3????????????????????????????

 

class Disc_quote :public Quote
{
public:
Disc_quote() = default;
Disc_quote(const string& book?? double price?? size_t qty?? double disc) :
Quote(book?? price)?? quantity(qty)?? discount(disc){}
double net_price(size_t)const = 0;
protected:
size_t quantity = 0;
double discount = 0.0;
};
class Bulk_quote :public Disc_quote
{
public:
Bulk_quote() = default;
Bulk_quote(const string &book?? double price?? size_t qty?? double disc) :
Disc_quote(book?? price?? qty?? disc){}
double net_price(size_t)const override;
};