国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++Primer第五版 第七章習(xí)題答案(21~30)

2019-11-08 19:35:04
字體:
供稿:網(wǎng)友

21.22:通常的做法是將相關(guān)變量定義為PRivate,而接口函數(shù)定義為public。具體情況具體討論

23:知識(shí)點(diǎn)1:類可以自定義某種類型在類中的別名—通過typedef和using

知識(shí)點(diǎn)2:如果我們需要合成的默認(rèn)構(gòu)造函數(shù),在空列表的構(gòu)造函數(shù)后加上=default即可

知識(shí)點(diǎn)3:類的成員也可以重載,參數(shù)列表數(shù)量或者類型上不同

知識(shí)點(diǎn)4:在變量前加關(guān)鍵字mutable,變?yōu)榭勺償?shù)據(jù)成員,即使是在一個(gè)const的對象函數(shù)中也可以被修改

知識(shí)點(diǎn)5:類內(nèi)初始值,直接用=賦予的方式是C++11新特性,也就是VS2013以上的版本才支持

知識(shí)點(diǎn)6:當(dāng)某個(gè)數(shù)據(jù)成員在構(gòu)造函數(shù)初始化列表中忽略,它將以默認(rèn)構(gòu)造函數(shù)的方式隱式初始化

#ifndef Cccc//第一次包含本頭文件時(shí),#ifndef判斷為真,預(yù)處理器將處理后面的內(nèi)容直到#endif,此時(shí)的預(yù)處理變量Cccc已定義#define Cccc//第二次包含本頭文件時(shí),#ifndef判斷為假,預(yù)處理器將忽略后面的內(nèi)容#include <string>class Screen {public:	using pos = std::string::size_type;//std庫中的string類的sizetype類型	Screen() = default;	Screen(pos ht, pos wd, char c) : height(ht), width(wd), contents(ht * wd, c)	{	}	char get() const { return contents[cursor]; }	char get(pos r, pos c) const { return contents[r * width + c]; }private:	pos cursor = 0;	pos height = 0, width = 0;	std::string contents;};#endif//只要簡單的加上就好了,無視C++中的作用域規(guī)則,作用是防止頭文件被重復(fù)包含/*c++ string::size_type詳解   	string::size_type類型   	從邏輯上來講,size()成員函數(shù)似乎應(yīng)該返回整型數(shù)值,或如2.2節(jié)“建議”中所述的無符號(hào)整數(shù)。但事實(shí)上,size操作返回的是string::size_type類型的值。	我們需要對這種類型做一些解釋。string類類型和許多其他庫類型都定義了一些伙伴類型(companion types)。這些伙伴類型使得庫類型的使用是機(jī)器無關(guān)的(machine-independent)。	size_type就是這些伙伴類型中的一種。它定義為與unsigned型(unsigned int或unsigned long)具有相同的含義,而且可以保證足夠大可存儲(chǔ)任意string對象的長度。	為了使用由string類型定義的size_type類型,程序員必須加上作用域操作符來說明所使用的size_type類型是由string類定義的。  	任何存儲(chǔ)string的size操作結(jié)果的變量必須為string::size_type類型。特別重要的是,不要把size的返回值賦給一個(gè)int變量。  	雖然我們不知道string::size_type的確切類型,但可以知道它是unsigned型(2.1.1節(jié))。對于任意一種給定的數(shù)據(jù)類型,它的unsigned型所能表示的最大正數(shù)值比對應(yīng)的signed要大一倍。	這個(gè)事實(shí)表明size_type存儲(chǔ)的string長度是int所能存儲(chǔ)的兩倍。  	使用int變量的另一個(gè)問題是,有些機(jī)器上int變量的表示范圍太小,甚至無法存儲(chǔ)實(shí)際并不長的string對象。如在有16位int型的機(jī)器上,int類型變量最大只能表示32767個(gè)字符的string對象。	而能容納一個(gè)文件內(nèi)容的string對象輕易就會(huì)超過這個(gè)數(shù)字。因此,為了避免溢出,保存一個(gè)string對象size的最安全的方法就是使用標(biāo)準(zhǔn)庫類型string:: size_type。  	string類類型和許多其他庫類型都定義了一些配套類型(companion type)。通過這些配套類型,庫類型的使用就能和機(jī)器無關(guān)(machine-independent)。string::size_type定義為unsigned型,可以保證足夠大的存儲(chǔ)string對象的長度。  	注意,任何存儲(chǔ)string的size操作結(jié)果的變量必須為string::size_type類型。尤其不能把size的返回值賦給一個(gè)int變量。(因?yàn)閟ize返回的是一個(gè)unsigned類型,而int是signed類型。size能表達(dá)的大小是int的2倍)。  string str("some string");   //通過字符串字面值賦值給串  for (string::size_type ix = 0; ix != str.size(); ++ix)   //此處不該為int     用!=,而不用<=  {  	cout<<str[ix]<<endl;  }  vector<int> ivec;  for(vector<int>::iterator ix = ivec.begin(); ix != ivec.end(); ++ix)     	//此處不該為int     用!=,而不用<=  {  	*ix = 0; //將各個(gè)元素賦值為0  }  綜上所述:string::size_type 等價(jià)于 unsigned ,使用情況為存儲(chǔ)字符串的大小*/

24:

Screen() = default; // 1Screen(pos ht, pos wd) : height(ht), width(wd), contents(ht * wd, ' ') {} // 2Screen(pos ht, pos wd, char c) : height(ht), width(wd), contents(ht * wd, c){} // 3其他同上

25:只有內(nèi)置類型和string類型可以依賴于操作的默認(rèn)版本

26:在類體外定義直接加inline即可,體內(nèi)聲明為inline也可,但要保持一致。

27:知識(shí)點(diǎn):返回引用的函數(shù)為左值,返回*this的函數(shù),返回本函數(shù)修改后的對象本身而非對象的副本。這樣的話就會(huì)出現(xiàn)函數(shù)的重復(fù)使用,如下:

myScreen.move(4, 0).set('#').display(std::cout);//move()和display()函數(shù)可以相互調(diào)用,因?yàn)樗麄兊姆祷刂凳菍ο蟮谋旧恚搶ο缶褪莔yScreen,move()和dispaly()函數(shù)對myScerrn執(zhí)行不同的操作

28:知識(shí)點(diǎn):若函數(shù)返回類型變?yōu)镾creen,則返回的是對象的副本,函數(shù)的操作只能添加于對象的副本上,對象的本身并沒有改變。

此題中,myScreen本身并不會(huì)被三個(gè)函數(shù)所改變,所以不會(huì)輸出“#”

29:正確

30:優(yōu)點(diǎn):

1:當(dāng)需要將一個(gè)對象作為整體引用而不是引用對象的一個(gè)成員時(shí),使用this,則該函數(shù)返回對調(diào)用該函數(shù)的對象的引用。 

2:可以非常明確地指出訪問的是調(diào)用該函數(shù)的對象的成員,且可以在成員函數(shù)中使用與數(shù)據(jù)成員同名的形參。  

缺點(diǎn):不必要使用,代碼多余。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 股票| 贵德县| 上思县| 平谷区| 富源县| 大埔县| 宕昌县| 阳朔县| 禄劝| 德安县| 定边县| 大安市| 昭觉县| 健康| 玛纳斯县| 武邑县| 贡山| 石门县| 诸暨市| 密云县| 札达县| 莆田市| 保靖县| 永定县| 广东省| 竹溪县| 马龙县| 三亚市| 桐庐县| 成武县| 资兴市| 会昌县| 洪湖市| 柳河县| 阜新市| 广西| 洛宁县| 文昌市| 邻水| 北安市| 衡南县|