日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器

發(fā)布時(shí)間:2025/3/21 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 繼承的構(gòu)造函數(shù)

1.1 C++11新標(biāo)準(zhǔn)中,派生類可以重用其直接基類定義的構(gòu)造函數(shù)。

繼承方式是提供一條注明了直接基類名的using聲明語(yǔ)句。

class Bulk_quote : public Disc_quote { public:using Disc_quote::Disc_quote; // inherit Disc_quote's constructorsdouble net_price(std::size_t) const; };<=> derived(parms) : base(args) {}例如: Bulk_quote(const std::string& book,double price,std::size_t qty, double disc):Disc_quote(book,price,qty,disc){}

● 構(gòu)造函數(shù)的using聲明不會(huì)改變?cè)摵瘮?shù)的訪問(wèn)級(jí)別,不能指定explicit或constexpr屬性。
● 派生類不能繼承默認(rèn)、拷貝和移動(dòng)構(gòu)造函數(shù)。如果派生類沒(méi)有直接定義這些構(gòu)造函數(shù),則編譯器會(huì)為其合成它們。

2. 繼承的構(gòu)造函數(shù)的特點(diǎn)

當(dāng)一個(gè)基類構(gòu)造函數(shù)含有默認(rèn)實(shí)參時(shí),這些默認(rèn)值不會(huì)被繼承。相反,派生類會(huì)獲得多個(gè)繼承的構(gòu)造函數(shù),其中每個(gè)構(gòu)造函數(shù)分別省略掉一個(gè)含有默認(rèn)值的形參。

eg. 基類有一個(gè)接受兩個(gè)形參的構(gòu)造函數(shù),其中第二個(gè)形參含有默認(rèn)實(shí)參,則派生類將獲得兩個(gè)構(gòu)造函數(shù),一個(gè)構(gòu)造函數(shù)接受兩個(gè)形參(沒(méi)有默認(rèn)實(shí)參),另一個(gè)只接受一個(gè)形參,它對(duì)應(yīng)于基類中最左側(cè)的沒(méi)有默認(rèn)值的那個(gè)形參。

大多數(shù)情況下派生類會(huì)繼承基類的構(gòu)造函數(shù),則除兩種情況:
● 派生類可以繼承一部分構(gòu)造函數(shù),而為其他構(gòu)造函數(shù)定義自己的版本,如果派生類定義的構(gòu)造函數(shù)與基類的構(gòu)造函數(shù)具有相同的參數(shù)列表,則該構(gòu)造函數(shù)將不會(huì)被繼承,定義在派生類中的構(gòu)造函數(shù)將替換繼承而來(lái)的構(gòu)造函數(shù)。

● 默認(rèn)、拷貝、移動(dòng)構(gòu)造函數(shù)不會(huì)被繼承,這些構(gòu)造函數(shù)按照正常規(guī)則被合成。如果一個(gè)類只含有繼承的構(gòu)造函數(shù),則它將擁有一個(gè)合成的默認(rèn)構(gòu)造函數(shù)。

2.容器與繼承

● 當(dāng)我們使用容器存放繼承體系中的對(duì)象時(shí),通常必須采用間接存儲(chǔ)的方式。
● 派生類對(duì)象直接賦值給積累對(duì)象,其中的派生類部分會(huì)被切掉。
● 在容器中放置(智能)指針而非對(duì)象。
● 對(duì)于C++面向?qū)ο蟮木幊虂?lái)說(shuō),一個(gè)悖論是我們無(wú)法直接使用對(duì)象進(jìn)行面向?qū)ο缶幊獭O喾?#xff0c;我們必須使用指針和引用。因?yàn)橹羔槙?huì)增加程序的復(fù)雜性,所以經(jīng)常定義一些輔助的類來(lái)處理這些復(fù)雜的情況。

vector<shared_ptr<Quote>> basket; basket.push_back(make_shared<Quote>("0-201-82470-1", 50)); basket.push_back(make_shared<Bulk_quote>("0-201-82470-1", 50, 10, 0.25));//此時(shí)basket存著shared_ptr,所以必須解引用basket.back()的返回值以獲得運(yùn)行net_price的對(duì)象 cout << basket.back()->net_price(15) << endl;

總結(jié)

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。