/*
第七章7.1;
*/
//#include<iostream>
//#include<string>
//using std::cin;
//using std::cout;
//using std::string;
//using std::endl;
//
//struct Sales_data{
// string bookNo;
// unsigned units_sold = 0;
// double revenue = 0.0;
//};
//
//int main()
//{
// Sales_data total;
// 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;
//}
/*
第七章7.3;
*/
//#include<iostream>
//#include"ex7_02.h"
//
//using std::cout;
//using std::cin;
//using std::endl;
//
//int main()
//{
// Sales_data total;
// if (cin >> total.bookNo >> total.units_sold >> total.revenue){
// Sales_data trans;
// while (cin >> trans.bookNo >> trans.units_sold >> trans.revenue){
// if (total.isbn() == trans.isbn()){
// total.combine(trans);
// }
// else
// {
// cout << total.bookNo << " " << total.units_sold << " " << total.revenue;
// total = trans;
// }//逻辑要清楚;
// }
// cout << total.bookNo << " " << total.units_sold << " " << total.revenue;
// }
// else{
// std::cerr << "No data!?"<<endl;
// return -1;
// }
//
// return 0;
//}
/*
第七章7.7;
*/
//#include "ex7_06.h"
//
//int main()
//{
// Sales_data total;
// if (read(std::cin, total))
// {
// Sales_data trans;
// while (read(std::cin, trans)){
// if (total.isbn() == trans.isbn()){
// total.combine(trans);
// }
// else{
// print(std::cout, total);
// total = trans;
// }
// }
// print(std::cout, total);
// }
// else
// {
// std::cerr << "No data?!" << std::endl;
// return -1;
// }
// return 0;
//}
///*
//第七章7.11;
//*/
//
//#include "ex7_11.h"
//int main()
//{
//
// //编译器支持的情况下;
// Sales_data item1;//创建对象,就会调用构造函数;
// print(std::cout, item1) << std::endl;//其实输出中有一个空字符串;
//
// Sales_data item2("ISBI00001");//创建不对的对象,尝试调用不同的构造函数;
// print(std::cout, item2) << std::endl;
//
// Sales_data item3("ISBI00001", 2, 25.0);
// print(std::cout, item3) << std::endl;
//
// Sales_data item4(std::cin);
// print(std::cout, item4) << std::endl;
//
//
// return 0;
//}
/*
第七章7.11;
*/
//
//#include "ex7_12.h"
//int main()
//{
//
// //编译器支持的情况下;
// Sales_data item1;//创建对象,就会调用构造函数;
// print(std::cout, item1) << std::endl;//其实输出中有一个空字符串;
//
// Sales_data item2("ISBI00001");//创建不对的对象,尝试调用不同的构造函数;
// print(std::cout, item2) << std::endl;
//
// Sales_data item3("ISBI00001", 2, 25.0);
// print(std::cout, item3) << std::endl;
//
// Sales_data item4(std::cin);
// print(std::cout, item4) << std::endl;
//
//
// return 0;
//}
/*
第七章7.13;
*/
//#include "ex7_11.h"
//
//#include "ex7_12.h"
//
//
//int main()
//{
// Sales_data total(std::cin);//调用构造函数;
// if (!total.isbn().empty()){
// std::istream& is = std::cin;
// while(is){
// Sales_data trans(is);
// //调用构造函数;类内具有初始化,构造函数;
// //所以while 循环肯定要执行一次;
// if (total.isbn() == trans.isbn()){
// total.combine(trans);
// }
// else{
// print(std::cout, total) << std::endl;
// total = trans;
// }
// }
// }
// else{
// std::cerr << "NO data!?" << std::endl;
// return -1;
// }
// return 0;
//}
/*
第七章7.27;
*/
//注意区别,当这些函数的返回类型是或者不是引用类型的时候,他们的返回值的差别,以及为什么;
//#include"ex7_27.h"
//
//int main()
//{
// Screen myScreen(5, 5, 'X');
// myScreen.move(3, 0).set('#').display(std::cout);
// std::cout << "\n";
// myScreen.display(std::cout);
// std::cout << "\n";
//
// return 0;
//}
//#include "ex7_41.h"
////委托构造函数的执行顺序;
//
//using std::cout;
//using std::endl;
//
//// constructor
//Sales_data::Sales_data(std::istream& is) : Sales_data()
//{
// std::cout << "Sales_data(istream &is)" << std::endl;
// read(is, *this);
//}
//
//// member functions.
//Sales_data& Sales_data::combine(const Sales_data& rhs)
//{
// units_sold += rhs.units_sold;
// revenue += rhs.revenue;
// return *this;
//}
//
//// friend functions
//std::istream& read(std::istream& is, Sales_data& item)
//{
// double price = 0;
// is >> item.bookNo >> item.units_sold >> price;
// item.revenue = price * item.units_sold;
// return is;
//}
//
//std::ostream& print(std::ostream& os, const Sales_data& item)
//{
// os << item.isbn() << " " << item.units_sold << " " << item.revenue;
// return os;
//}
//
//Sales_data add(const Sales_data& lhs, const Sales_data& rhs)
//{
// Sales_data sum = lhs;
// sum.combine(rhs);
// return sum;
//}
//
//
//
//int main()
//{
// cout << "1. default way: " << endl;
// cout << "----------------" << endl;
// Sales_data s1;
//
// cout << "\n2. use std::string as parameter: " << endl;
// cout << "----------------" << endl;
// Sales_data s2("CPP-Primer-5th");
//
// cout << "\n3. complete parameters: " << endl;
// cout << "----------------" << endl;
// Sales_data s3("CPP-Primer-5th", 3, 25.8);
//
// cout << "\n4. use istream as parameter: " << endl;
// cout << "----------------" << endl;
// Sales_data s4(std::cin);
//
// return 0;
//}
/*注意调用的先后顺序;
* 1. default way:
* ----------------
* Sales_data(const std::string&, unsigned, double)
* Sales_data()
*
* 2. use std::string as parameter:
* ----------------
* Sales_data(const std::string&, unsigned, double)
* Sales_data(const std::string&)
*
* 3. complete parameters:
* ----------------
* Sales_data(const std::string&, unsigned, double)
*
* 4. use istream as parameter:标准输入为参数;先执行默认构造函数,再执行委托构造函数;
* ----------------
* Sales_data(const std::string&, unsigned, double)
* Sales_data()
* Sales_data(istream &is)
*
*/
/*
第七章7.43;
定义一个含有类类型的类的默认构造函数;
*/
//
//#include <vector>
//
//class NoDefault {
//public:
// NoDefault(int i) {}
//};
//
//class C {
//public:
// C() : def(0) {} // define the constructor of C.
//private:
// NoDefault def;
//};
//
//int main()
//{
// C c;
//
// std::vector<C> vec(10);
// return 0;
//}
/*
第七章7.52;
聚合类;
*/
//#include"ex7_52.h"
//#include<iostream>
//int main()
//{
// Sales_data item = { "9-999-99-9", 0, 0 };
// std::cout << item.bookNo << std::endl;
//
// return 0;
//}
/*
第七章7.55;
是否是字面值常量类;
*/
//#include <string>
//#include <iostream>
//#include <type_traits>
//
//struct Data {
// int ival;
// std::string s;
//};
//
//int main()
//{
// std::cout << std::boolalpha;
// //判断是不是字面值类型的函数!
// std::cout << std::is_literal_type<Data>::value << std::endl;
// // output: false
//}
总结:
还是要多写程序,多做练习。通过实践才能知道自己哪些地方掌握的不好,哪些知识理解的有问题。通过练习才能熟练,才能进一步探究。
另外,通过多看别人写的优秀的代码,养成良好的编程习惯。
2016-11-25