C++Primer第五版 第七章习题答案(1~10)
2017-02-16 08:52
411 查看
1:知识点1:类的定义方法:struct和class两种方法的用法和区别。
知识点2:类内成员的初始化方法:成员初始化列表。编译器会调用构造函数初始化成员,可以被重载。
首先举个例子方便于理解:
此题的答案:
2:知识点1:在.h文件中声明类较好
知识点2:this指的是“这个”对象,是一个常量指针
知识点3:紧跟在参数列表之后的const表示this是一个常量指针——关于const成员函数,表明常量成员函数不能改变调用它对象的内存,也就是表示该函数只可访问,不可修改。
本小节已经介绍了combine和isbn的相关信息,直接加入该类即可。
3:将第一题中的+=操作改为使用combine函数即可。
4 . 5:使用class来实现这个类
最好是const,这样就可以保证该函数只能访问内部变量而不能写内部变量。
6 . 7:知识点1:与类相关的函数虽然可以定义声明分开,但是需要将其与类放在同一个文件中,这样在使用接口时只需要引入一个文件即可。
加入书中的三个函数即可
替换掉原来的三种操作皆可
8:知识点:普通引用和常量引用的区别在于你是否想改变它~
9:知识点:撰写头文件时,无论是否被包含在其他任何头文件中,都应设置保护符,防止重复包含
撰写头文件时应加上以下代码:
稍加修改即可:
10:很明显由外向内的分析,条件语句的作用是同时判断两次读操作的对象。
知识点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:很明显由外向内的分析,条件语句的作用是同时判断两次读操作的对象。
相关文章推荐
- C++Primer第五版 第十九章习题答案(1~10)
- C++Primer 中文版 第五版 第七章课后习题答案
- C++Primer第五版 第五章习题答案(1~10)
- C++Primer第五版 第八章习题答案(1~10)
- C++Primer第五版 第七章习题答案(31~40)
- C++Primer第五版 第十二章习题答案(1~10)
- C++Primer第五版 第十五章习题答案(1~10)
- C++Primer第五版 第二章习题答案(1~10)
- C++Primer第五版 第四章习题答案(1~10)
- C++Primer第五版 第九章习题答案(1~10)
- C++Primer第五版 第三章习题答案(1~10)
- C++Primer第五版 第十八章习题答案(1~10)
- C++Primer第五版 第七章习题答案(41~50)
- C++Primer第五版 第七章习题答案(21~30)
- C++Primer第五版 第七章习题答案(51~58)
- C++Primer第五版 第十章习题答案(1~10)
- C++Primer第五版 第十六章习题答案(1~10)
- C++Primer第五版 第十一章习题答案(1~10)
- C++Primer第五版 第十三章习题答案(1~10)
- C++Primer第五版 第六章习题答案(21~30)