/* 第七章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 << " "; // myScreen.display(std::cout); // std::cout << " "; // // 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 << " 2. use std::string as parameter: " << endl; // cout << "----------------" << endl; // Sales_data s2("CPP-Primer-5th"); // // cout << " 3. complete parameters: " << endl; // cout << "----------------" << endl; // Sales_data s3("CPP-Primer-5th", 3, 25.8); // // cout << " 4. use istream as parameter: " << endl; // cout << "----------------" << endl; // Sales_data s4(std::cin); // // return 0; //} // print /*注意调用的先后顺序; * 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