C++ Primer chap7

/*
第七章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

原文地址:https://www.cnblogs.com/Allen-rg/p/6101656.html