zoukankan      html  css  js  c++  java
  • 【C++ Primer 第7章】定义抽象数据类型

    参考资料

    1. C++Primer #7 类

    Sales_data类

      Sales_data.h 

     1 #include<iostream>
     2 #include<string>
     3 
     4 class Sales_data  
     5 {
     6     friend std::istream& operator >> (std::istream&, Sales_data&);
     7     friend std::ostream& operator << (std::ostream&, Sales_data&);
     8     friend Sales_data operator + (const Sales_data&, const Sales_data&);
     9     friend bool operator == (const Sales_data&, const Sales_data&)
    10     public:       
    11         Sales_data() = default;  
    12         Sales_data(std::string s): bookNo(s), units_sold(0), revenue(0.0) {}  
    13         Sales_data(std::string s, unsigned n, double p): bookNo(s), units_sold(n), revenue(p) {}  
    14     public:       
    15         string isbn() const { return bookNo; } 
    16         Sales_data& operator += (const Sales_data&);
    17     private:  
    18        string bookNo;              //书籍编号
    19        double units_sold = 0;      //销售量
    20        double sellingprice = 0.0;  //原始价格
    21        double salesprice = 0.0;    //实售价格
    22        double discount = 0.0;      //折扣量
    23 };

      Sales_data.cpp 

     1 #include"Sales_data.h"
     2 #include<iostream>
     3 #include<string>
     4 
     5 bool Sales_data::operator == (const Sales_data &lhs, const Sales_data &rhs)
     6 {
     7     return lhs.units_sold == rhs.units_sold &&
     8            lhs.sellprice == rhs.sellprice && 
     9            lhs.salesprice == rhs.salesprice &&
    10            lhs.isbn() == rhs.isbn();
    11 }
    12 
    13 Sales_data Sales_data::operator + (const Sales_data &lhs, const Sales_data &rhs)
    14 {
    15     Sales_data ret(lhs);
    16     ret += rhs;
    17     return ret;
    18 }
    19 
    20 Sales_data& Sales_data::operator += (const Sales_data &rhs)
    21 {
    22      units_sold += rhs.units_sold;
    23      salesprice = (units_sold * salesprice + rhs.units_sold * rhs.salesprice)
    24       / (units_sold + rhs.units_sold);
    25       if(sellprice != 0)
    26           discount = salesprice / sellprice;
    27       return *this; 
    28 }
    29 
    30 istream& Sales_data::operator >> (std::istream &in, Sales_data &s)
    31 {
    32     in >> s.bookNo >> s.sellprice >> s.salesprice;
    33     if(in && s.sellingprice != 0)
    34         s.discount = s.salesprice / s.sellprice;
    35     else
    36         s = Sales_data();
    37 }
    38 
    39 ostream& Sales_data::operator << (std::ostream &os, const Sales_data &s)
    40 {
    41     os << s.isbn() << " " << s.units_sold << " " << s.sellprice << " "
    42        << s.salesprice << " " << s.discount;
    43     return os;
    44 }

     构造函数

    功能:初始化类对象的数据成员。无论何时只要类的对象被创建,就会执行构造函数。

    特点:构造函数的名字和类的名字相同。类可以包含有多个构造函数(类似重载函数)。不同于其他成员函数,构造函数不能被声明为const,且没有返回类型。

    默认构造函数:无需任何实参,执行默认初始化。

    合成默认构造函数:编译器创建的构造函数


    只有当类没有声明任何构造函数时,编译器才会自动隐式地定义一个默认构造函数。

    • 如果类包含有内置类型或复合类型的成员,则只有当这些成员全部都被赋予了类的初始值,这个类才适合于使用合成的默认构造函数

  • 相关阅读:
    cmake默认变量
    关于字符编码
    cmake 变量
    动态库对外暴露api的方法
    vs2013工程技巧
    大学毕业4年-未来展望(1)-商业研究
    大学毕业4年-未来展望-序
    大学毕业4年-未来展望-序
    大学毕业4年-回顾和总结(3)-投资理财观-图穷而真相现
    大学毕业4年-回顾和总结(3)-投资理财观-图穷而真相现
  • 原文地址:https://www.cnblogs.com/sunbines/p/9200673.html
Copyright © 2011-2022 走看看