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

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

C++Primer第五版 第七章習題答案(1~10)

2019-11-08 19:43:19
字體:
來源:轉載
供稿:網友

1:知識點1:類的定義方法:struct和class兩種方法的用法和區別。

知識點2:類內成員的初始化方法:成員初始化列表。編譯器會調用構造函數初始化成員,可以被重載。

首先舉個例子方便于理解:

#include <iostream>#include<string>#include<vector>using namespace std;/*C++ 中保留了C語言的 struct 關鍵字,并且加以擴充。在C語言中,struct 只能包含成員變量,不能包含成員函數。而在C++中,struct 類似于 class,既可以包含成員變量,又可以包含成員函數。C++中的 struct 和 class 基本是通用的,唯有幾個細節不同:1:使用 class 時,類中的成員默認都是 PRivate 屬性的;而使用 struct 時,結構體中的成員默認都是 public 屬性的。(最本質的區別)2:class 繼承默認是 private 繼承,而 struct 繼承默認是 public 繼承(《C++繼承與派生》一章會講解繼承)。3:class 可以使用模板,而 struct 不能。*///利用class定義類class Student{	Student(string name, int age, int score);//構造函數	string m_name;	int m_age;	int m_score;//定義三個變量	void showname()//定義一個函數	{		cout<<m_name<<"的年齡是:"<<m_age<<",得分為:"<<m_score<<endl;	}//類內定義的函數,編譯器會優先視為內聯函數public:private:protected://三種形式};Student::Student(string name, int age, int score):m_name(name), m_age(age), m_score(score){ }//成員初始化列表,將name賦給m_name,改變類內變量//利用strcut定義類struct Students{	Students(string name, int age, int score);//構造函數		string m_name;	int m_age;	int m_score;//定義三個變量,默認public	void shownames()//定義一個函數	{		cout<<m_name<<"的年齡是:"<<m_age<<",得分為:"<<m_score<<endl;	}//類內類外定義皆是在同文件中,也可定義在.h文件中。};Students::Students(string name, int age, int score):m_name(name), m_age(age), m_score(score){ }//列表初始化,覆蓋類的內部變量/*總結1:struct作為數據結構的實現體,它默認的數據訪問控制是public的,而class作為對象的實現體,它默認的成員變量訪問控制是private的2:當你覺得你要做的更像是一種數據結構的話,那么用struct,如果你要做的更像是一種對象的話,那么用class。 3:然而對于訪問控制,應該在程序里明確的指出,而不是依靠默認,這是一個良好的習慣,也讓你的代碼更具可讀性。 */int main(int argc, char** argv){	Student stu1("小明", 18, 3);//報錯:雖然已聲明,但是不可訪問。成員沒有限定public,默認都是private,外部不可訪問。	Students stu2("小明", 18, 3);//正常	stu2.shownames();	return 0;}

此題的答案:

#include <iostream>#include<string>#include<vector>using namespace std;struct Sales_data {	Sales_data();	string bookNo;	unsigned units_sold ;	double revenue ;//類內部的變量成員不允許在定義時初始化,必須使用構造函數};Sales_data::Sales_data(){	units_sold = 0;	revenue = 0.0;}int main(int argc, char **argv){	Sales_data total;//此部分和第一章21頁的內容相同	if (cin >> total.bookNo >> total.units_sold >> total.revenue) {		Sales_data trans;		while (cin >> trans.bookNo >> trans.units_sold >> trans.revenue) {			if (total.bookNo == trans.bookNo) {				total.units_sold += trans.units_sold;				total.revenue += trans.revenue;//第三題的使用修改之處			}			else {				cout << total.bookNo << " " << total.units_sold << " "					<< total.revenue << endl;				total = trans;			}		}		cout << total.bookNo << " " << total.units_sold << " " << total.revenue			<< endl;	}	else {		std::cerr << "No data?!" << std::endl;		return -1;	}	return 0;}2:知識點1:在.h文件中聲明類較好

知識點2:this指的是“這個”對象,是一個常量指針

知識點3:緊跟在參數列表之后的const表示this是一個常量指針——關于const成員函數,表明常量成員函數不能改變調用它對象的內存,也就是表示該函數只可訪問,不可修改。

本小節已經介紹了combine和isbn的相關信息,直接加入該類即可。

3:將第一題中的+=操作改為使用combine函數即可。

4 . 5:使用class來實現這個類

#include <iostream>#include<string>#include<vector>using namespace std;class Person{public://聲明為public	Person(string Client_name, string Client_address);//構造函數	Person();//構造函數的重載	string name;	string address;//內部變量	void Show_info()	{		cout<<name<<"'s"<<" address is "<<address<<endl;	}//類內定義函數	string& const getname()	{		return name;	}	string& const getaddress()	{		return address;	}//返回姓名地址的函數,只可訪問,不可修改};Person::Person(string Client_name, string Client_address):name(Client_name),address(Client_address){};//構造函數定義內部變量//此處我們在一個文件內定義了該類,如若類較大,應置于.h文件中int main(int argc, char **argv){	Person Client1("Mr.right","your heart");//實例化	Client1.Show_info();//調用其中的顯示信息函數	return 0;}

最好是const,這樣就可以保證該函數只能訪問內部變量而不能寫內部變量。

6 . 7:知識點1:與類相關的函數雖然可以定義聲明分開,但是需要將其與類放在同一個文件中,這樣在使用接口時只需要引入一個文件即可。

加入書中的三個函數即可

替換掉原來的三種操作皆可

8:知識點:普通引用和常量引用的區別在于你是否想改變它~

9:知識點:撰寫頭文件時,無論是否被包含在其他任何頭文件中,都應設置保護符,防止重復包含

撰寫頭文件時應加上以下代碼:

#ifndef Cccc//第一次包含本頭文件時,#ifndef判斷為真,預處理器將處理后面的內容直到#endif,此時的預處理變量Cccc已定義#define Cccc//第二次包含本頭文件時,#ifndef判斷為假,預處理器將忽略后面的內容,預處理變量一般定義為本頭文件的大寫形式/*....*/#endif//只要簡單的加上就好了,無視C++中的作用域規則

稍加修改即可:

istream& read(istream& is, Person& person){    is >> person.name >> person.address;    if (!is) person = Person();    return is;//返回輸入流}//接受一個IO類型的引用作為其參數,IO類屬于不能被拷貝的類型,只能用引用來傳遞它們ostream& print(ostream& os, const Person& person){    os << person.name << " " << person.address;    return os;}

10:很明顯由外向內的分析,條件語句的作用是同時判斷兩次讀操作的對象。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 盐城市| 平罗县| 山丹县| 满城县| 施秉县| 龙州县| 临澧县| 开阳县| 辽源市| 贵阳市| 鄂温| 汪清县| 施秉县| 衡水市| 南溪县| 河北省| 天气| 阿坝县| 凌海市| 偃师市| 哈密市| 公主岭市| 四平市| 栖霞市| 盱眙县| 海兴县| 神木县| 黔西| 义马市| 西吉县| 紫阳县| 沂源县| 贺兰县| 永善县| 遂川县| 滨海县| 汉川市| 乐至县| 宜兰市| 策勒县| 安多县|