天天看點

C++Primer第五版 第七章習題答案(11~20)

11:知識點1:構造函數—特殊的成員函數,用來控制對象的初始化過程。無傳回類型,可重載,不能被聲明為const.

知識點2:若無,則有預設的構造函數,是編譯器自己隐式的定義的。又稱合成的預設構造函數。

知識點3:某些類是不能使用預設的構造函數的,以下三個原因:

1:在未聲明任何構造函數的前提下,類内對象的初始化将不受控制

2:合成的預設構造函數可能會造成不必要的錯誤,如若沒有類内初始值來初始化成員,可能這些成員将是未定義的。

3:如果類中包含了一個其他類類型的成員,且這個成員的類型沒有預設構造函數,那麼編譯器将無法初始化該對象。

是以,在撰寫類的時候,最好定義一個自己的構造函數。

12:知識點:内部外部定義構造函數是不影響的

将其移至内部即可

13:執行個體化對象時修改一下即可

Sales_data total(cin);
	if (cin)
	{
		Sales_data trans(cin);
		do
		{
			if (total.isbn() == trans.isbn())
				total.combine(trans);
			else
			{
				print(cout, total) << endl;
				total = trans;
			}
		}while (read(cin, trans));
		print(cout, total)<<endl;
	}
	else
	{
		cerr << "No data?!"<<endl;
	}
           

14:仍然可以使用清單初始化的方法,直接将數值賦給成員。

Sales_data() : units_sold(0) , revenue(0){};
           

15:見本章第四題答案。

16:知識點1:需要控制的類的相關操作—類成員的初始化、拷貝、指派、銷毀對象

知識點2:private隐藏類的相關實作細節,實作封裝。

     通路說明符的作用域是開始知道下一個通路說明符或者類結束。不想被使用該類的程式看到的代碼細節,都要private.

17:見本章第一題講解。

18:封裝實作了類的接口和實作的分離,隐藏了類的實作細節,使用者隻能接觸到類的接口。

優點:

隐藏類的實作細節;

讓使用者隻能通過程式規定的方法來通路資料;

可以友善的加入存取控制語句,限制不合理操作;

類自身的安全性提升,隻能被通路不能被修改;

類的細節可以随時改變,不需要修改使用者級别的代碼;

19:相關的資訊變量為private

通路這些變量的函數為public

就是判斷你的資訊是否需要隐藏起來!

20:知識點1:友元—類允許其他類或者函數通路其非共有成員,隻要在本類内,加一條類前或者函數前有friend關鍵字(最前方)的聲明即可。最好在類的開始或結尾集中聲明友元。

優點:可以靈活地實作需要通路若幹類的私有或受保護成員才能完成的任務,便于與其他不支援類的語言進行混合程式設計;通過使用友元函數重載可以更自然第使用C++語言的I/O流庫。      
缺點:一個類将對非公有成員的通路權授予其他的函數或類,會破壞該類的封裝性,降低該類的可靠性和可維護性。
      

繼續閱讀