C++ Primer 读书笔记及知识点延伸 chapter1

2 篇文章 0 订阅
2 篇文章 0 订阅

C++ Primer  chapter 1

  1. main函数的返回值在正常情况下为0,程序错误时可能返回其他的值 。
  2. 在编译程序时,命令行只需要包含源文件的参数
    //test.hpp
    void test()
    {
        std::cout<<"test"<<std::endl;
    }
    //main.cc
    #include"test.hpp"
    int main()
    {
        test();
        return 0;
    }
    
    g++ main.cc -o main
    
    在编译main.cc程序时会自动加上头文件。
    上一段中的编译得到的程序为 main ,命令行中输入 ./main 便可以执行这段代码。./ 代表当前的命令行文件路径。
    如果不添加其他参数 只有g++ main.cc会生成a.out默认文件
    
    
  3. 头文件的后缀可以为 .h .hpp ,源文件后缀可以是.cc  .cpp .cxx .C等
  4. iostream库包含两个基本的类型 istream和 ostream,表示输入与输出流。其中包括了4个标准输入输出流
    cin    标准输入 
    cout 标准输出
    cerr  输入警告和错误信息,也叫做标准错误 
    clog  程序运行时输出一般性的信息
  5. 附程序代码
    //Sales_item.h
    #ifndef SALES_ITEM_H_
    #define SALES_ITEM_H_
    
    #include<iostream>
    #include<string>
    
    class Sales_item
    {
            //四个友元函数的定义,二元运算符号,返回的并不是Sales_item对象
            //运算符的重载,注意const修饰//友元函数并不是类中的函数,而是外部函数,可以直接调用类中的函数以及变量
            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&);
    private:
            std::string bookNo;
            unsigned units_sold = 0;
            double revenue = 0.0;
    public:
            Sales_item& operator+=(const Sales_item&);
            std::string isbn() const {return bookNo;}//ISBN
            double avg_price() const;
    };
    //重载+,先定义后使用
    Sales_item operator+(const Sales_item& lhs,const Sales_item& rhs);
    
    //inline表示这个函数为内联函数,编译之前直接替换,会造成代码膨胀
    inline bool compareIsbn(const Sales_item& lhs,const Sales_item& rhs)
    {
            return lhs.isbn() == rhs.isbn();
    }
    
    //因为==已经是友元函数,所以!=函数里直接使用==函数就可以,不要再将其设置为友元函数
    inline bool operator!=(const Sales_item& lhs,const Sales_item& rhs)
    {
            return !(rhs==lhs);
    }
    
    //成员函数
    
    Sales_item& Sales_item::operator+=(const Sales_item& rhs)
    {
            units_sold+=rhs.units_sold;
            revenue += rhs.revenue;
            return *this;
    }
    double Sales_item::avg_price() const
    {
            if(units_sold)
                    return revenue/units_sold;
            return 0;
    }
    
    
    Sales_item operator+(const Sales_item& lhs,const Sales_item& rhs)
    {
            Sales_item ret(lhs);
            ret+=rhs;
            return ret;
    }
    //友元函数
    std::istream& operator>>(std::istream& in,Sales_item& s)
    {
            //可以把这里的in 看成cin,其实cin也是一个类,其中>>被重载
            double price;
            //连续输入3个变量
            //这里为友元函数  可以直接调用s的所有成员函数/变量
            in>>s.bookNo>>s.units_sold>>price;//结合性为自左向右
            if(in)//如果in合法
                    s.revenue = s.units_sold*price;
            else
                    s = Sales_item();
            //输入输出流的重载函数中返回的是 输入输出对象
            return in;
    }
    std::ostream& operator<<(std::ostream& out,const Sales_item& s)
    {
    		
            out<<s.isbn()<<" "<<s.units_sold<<" "<<s.revenue<<" "<<s.avg_price()<<std::endl;
            return out;
    }
    inline bool operator==(const Sales_item& lhs,const Sales_item& rhs)
    {
            return lhs.units_sold == rhs.units_sold &&
                    lhs.revenue == rhs.revenue &&
                    lhs.isbn() == rhs.isbn();
    }
    #endif


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值