c++ primer 5th 第一章读书笔记

1.一个函数包含四部分:返回类型(return type)、函数名(function name)、一个括号包围的形参列表(parameter list)、函数体(function body)。
2.标准库定义4个IO对象 cin(标准输入),cout (标准输出),cerr(标准错误信息),clog(标准日志)

//一个简单的c++程序
#include 
using namespace std;

int main(void)
{
    cout << "Enter weo numbers: " << endl;
    int v1 = 0, v2 = 0;
    cin >> v1 >> v2;
    cout << "The sum of " << v1 << "and " << v2 << " is " << v1 + v2 << endl;
    return 0;
}

3.while,do while,for三种循环分别有自己独特的特点,看需求选择使用。
4.读取不定的输入数据

while(std::cin >> value)

使用istream对象作为条件,效果是检测流的状态,即流未遇到错误时,整个对象为ture

5.Sales_item.h头文件的实现

/*

* This file contains code from "C++ Primer, Fifth Edition", by Stanley B.

* Lippman, Josee Lajoie, and Barbara E. Moo, and is covered under the

* copyright and warranty notices given in that book:

*

* "Copyright (c) 2013 by Objectwrite, Inc., Josee Lajoie, and Barbara E. Moo."

*

*

* "The authors and publisher have taken care in the preparation of this book,

* but make no expressed or implied warranty of any kind and assume no

* responsibility for errors or omissions. No liability is assumed for

* incidental or consequential damages in connection with or arising out of the

* use of the information or programs contained herein."

*

* Permission is granted for this code to be used for educational purposes in

* association with the book, given proper citation if and when posted or

* reproduced.Any commercial use of this code requires the explicit written

* permission of the publisher, Addison-Wesley Professional, a division of

* Pearson Education, Inc. Send your request for permission, stating clearly

* what code you would like to use, and in what specific way, to the following

* address:

*

*     Pearson Education, Inc.

*     Rights and Permissions Department

*     One Lake Street

*     Upper Saddle River, NJ  07458

*     Fax: (201) 236-3290

*/



/* This file defines the Sales_item class used in chapter 1.

* The code used in this file will be explained in

* Chapter 7 (Classes) and Chapter 14 (Overloaded Operators)

* Readers shouldn't try to understand the code in this file

* until they have read those chapters.

*/



#ifndef SALESITEM_H

// we're here only if SALESITEM_H has not yet been defined 

#define SALESITEM_H



// Definition of Sales_item class and related functions goes here

#include 

#include 



class Sales_item {

    // these declarations are explained section 7.2.1, p. 270 

    // and in chapter 14, pages 557, 558, 561

    friend std::istream& operator >> (std::istream&, Sales_item&);

    friend std::ostream& operator<<(std::ostream&, const Sales_item&);

    friend bool operator<(const Sales_item&, const Sales_item&);

    friend bool

        operator==(const Sales_item&, const Sales_item&);

public:

    // constructors are explained in section 7.1.4, pages 262 - 265

    // default constructor needed to initialize members of built-in type

    Sales_item() = default;

    Sales_item(const std::string &book) : bookNo(book) { }

    Sales_item(std::istream &is) { is >> *this; }

public:

    // operations on Sales_item objects

    // member binary operator: left-hand operand bound to implicit this pointer

    Sales_item& operator+=(const Sales_item&);



    // operations on Sales_item objects

    std::string isbn() const { return bookNo; }

    double avg_price() const;

    // private members as before

private:

    std::string bookNo;      // implicitly initialized to the empty string

    unsigned units_sold = 0; // explicitly initialized

    double revenue = 0.0;

};



// used in chapter 10

inline

bool compareIsbn(const Sales_item &lhs, const Sales_item &rhs)

{
    return lhs.isbn() == rhs.isbn();
}



// nonmember binary operator: must declare a parameter for each operand

Sales_item operator+(const Sales_item&, const Sales_item&);



inline bool

operator==(const Sales_item &lhs, const Sales_item &rhs)

{

    // must be made a friend of Sales_item

    return lhs.units_sold == rhs.units_sold &&

        lhs.revenue == rhs.revenue &&

        lhs.isbn() == rhs.isbn();

}



inline bool

operator!=(const Sales_item &lhs, const Sales_item &rhs)

{

    return !(lhs == rhs); // != defined in terms of operator==

}



// assumes that both objects refer to the same ISBN

Sales_item& Sales_item::operator+=(const Sales_item& rhs)

{

    units_sold += rhs.units_sold;

    revenue += rhs.revenue;

    return *this;

}



// assumes that both objects refer to the same ISBN

Sales_item

operator+(const Sales_item& lhs, const Sales_item& rhs)

{

    Sales_item ret(lhs);  // copy (|lhs|) into a local object that we'll return

    ret += rhs;           // add in the contents of (|rhs|) 

    return ret;           // return (|ret|) by value

}



std::istream&

operator >> (std::istream& in, Sales_item& s)

{

    double price;

    in >> s.bookNo >> s.units_sold >> price;

    // check that the inputs succeeded

    if (in)

        s.revenue = s.units_sold * price;

    else

        s = Sales_item();  // input failed: reset object to default state

    return in;

}



std::ostream&

operator<<(std::ostream& out, const Sales_item& s)

{

    out << s.isbn() << " " << s.units_sold << " "

        << s.revenue << " " << s.avg_price();

    return out;

}



double Sales_item::avg_price() const

{

    if (units_sold)

        return revenue / units_sold;

    else

        return 0;

}

#endif

7.书店程序源码

#include 
#include "Sales_item.h"
using namespace std;

int main(void)
{
    Sales_item total;
    if (cin >> total) {
        Sales_item trans;
        while (cin >> trans) {
            if (total.isbn() == total.isbn())
                total += trans;
            else {
                cout << total << endl;
                total = trans;
            }
        }
        cout << total << endl;
    }
    else {
        cerr << "No data?!" << endl;
    }
    return 0;
}

你可能感兴趣的:(读书笔记)