参考资料

1. C++Primer #7 类

Sales_data类

Sales_data.h

 #include<iostream>
#include<string> class Sales_data
{
friend std::istream& operator >> (std::istream&, Sales_data&);
friend std::ostream& operator << (std::ostream&, Sales_data&);
friend Sales_data operator + (const Sales_data&, const Sales_data&);
friend bool operator == (const Sales_data&, const Sales_data&)
public:
Sales_data() = default;
Sales_data(std::string s): bookNo(s), units_sold(), revenue(0.0) {}
Sales_data(std::string s, unsigned n, double p): bookNo(s), units_sold(n), revenue(p) {}
public:
string isbn() const { return bookNo; }
Sales_data& operator += (const Sales_data&);
private:
string bookNo; //书籍编号
double units_sold = ; //销售量
double sellingprice = 0.0; //原始价格
double salesprice = 0.0; //实售价格
double discount = 0.0; //折扣量
};

Sales_data.cpp

 #include"Sales_data.h"
#include<iostream>
#include<string> bool Sales_data::operator == (const Sales_data &lhs, const Sales_data &rhs)
{
return lhs.units_sold == rhs.units_sold &&
lhs.sellprice == rhs.sellprice &&
lhs.salesprice == rhs.salesprice &&
lhs.isbn() == rhs.isbn();
} Sales_data Sales_data::operator + (const Sales_data &lhs, const Sales_data &rhs)
{
Sales_data ret(lhs);
ret += rhs;
return ret;
} Sales_data& Sales_data::operator += (const Sales_data &rhs)
{
units_sold += rhs.units_sold;
salesprice = (units_sold * salesprice + rhs.units_sold * rhs.salesprice)
/ (units_sold + rhs.units_sold);
if(sellprice != )
discount = salesprice / sellprice;
return *this;
} istream& Sales_data::operator >> (std::istream &in, Sales_data &s)
{
in >> s.bookNo >> s.sellprice >> s.salesprice;
if(in && s.sellingprice != )
s.discount = s.salesprice / s.sellprice;
else
s = Sales_data();
} ostream& Sales_data::operator << (std::ostream &os, const Sales_data &s)
{
os << s.isbn() << " " << s.units_sold << " " << s.sellprice << " "
<< s.salesprice << " " << s.discount;
return os;
}

构造函数

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

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

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

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


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

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

【C++ Primer 第7章】定义抽象数据类型的更多相关文章

  1. <<C++ Primer>> 第 7 章 类

    术语表 第 7 章 类 抽象数据类型(abstract data type): 封装(隐藏)了实现细节的数据结构.    访问说明符(access specifier): 包括关键字 public 和 ...

  2. [C++ Primer] 第7章: 类

    定义抽象数据类型 定义在类内部的函数是隐式的inline函数. const成员函数 又叫做常量成员函数, 成员函数参数列表之后紧跟const关键字, const修饰的是类this指针. 默认情况下th ...

  3. C++ Primer Plus 第一章 预备知识

    C++ Primer Plus 第一章 预备知识 知识点梳理 本章主要讲述了C++的由来,讨论了面向过程语言与面向对象语言的区别,介绍了ANSI/ISO制定的C++标准,阐述了在Windows.Mac ...

  4. 第二章 深入 C# 数据类型

    第二章 深入 C# 数据类型 1.封装又称信息隐藏,是指利用抽象数据类型将数据和数据的操作结合在一起,使其构成一个不可分割的独立实体,尽可能的隐藏内部的细节,只保留一些对外接口,使之于外部发生联系. ...

  5. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

  6. C++ Primer 第2章 变量和基本类型

    C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...

  7. 逆向基础 C++ Primer Plus 第二章 开始学习C++

    C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...

  8. 抽象数据类型ADT

    ADT(Abstract Data Type) 类型由什么组成? 一个类型(type)指定两类信息,一个属性集和一个操作集. 假设要定义一个新的数据类型.首先,要提供存储数据的方式,可能是通过设计一个 ...

  9. C语言泛型编程--抽象数据类型

    一.数据类型: 在任何编程语言中,数据类型作为一个整体,ANSI-C包含的类型为:int.double.char……,程序员很少满意语言本身提供的数据类型,一个简单的办法就是构造类似:array.st ...

随机推荐

  1. 文件上传---form表单,ajax,jquery,以及iframe无刷新上传 (processData,contentType讲解)

    服务端程序: import tornado.web import os IMG_LIST=[] class IndexHandler(tornado.web.RequestHandler): def ...

  2. 学习windows编程 day3 之 自定义画笔的两种方法

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  3. dubbo注册服务和消费服务---入门篇

    本文介绍如何用dubbo+zk来实现一个注册服务 + 消费服务的入门小demo 需要环境:zk服务器 两个maven项目,一个负责提供服务,一个负责消费服务. dubbo-service 服务端 po ...

  4. Eclipse Groovy插件使用时出现的错误 org.eclipse.core.runtime.InvalidRegistryObjectException: Invalid registry object

    在eclipse marketplace中下载了groovy插件,发现使用的groovy版本跟项目中使用的groovy版本不一致. 于是在Preferences -> Groovy -> ...

  5. 10-SQL Server 2008 R2安装步骤

    一.  软件和环境 1.  软件 : SQL Server 2008 R2 企业版     软件下载地址:XXXX 2.  环境要求: .Net FrameWork 3.5 以上 (windows 7 ...

  6. C# PointToScreen

    子窗体定位时,如果主窗口不在左上角,需要根据主窗口的坐标,相减才行. Point p1 = Label.PointToScreen(new Point(0, 0)); p1.X -= this.X; ...

  7. 16. Spring boot 错误页面

      默认效果:1).浏览器,返回一个默认的错误页面 1.1 请求头 1.2返回结果 2).如果是其他客户端,默认响应一个json数据 2.1请求头 2.2返回结果 { "timestamp& ...

  8. Tomcat环境变量,端口号,编码格式,项目路径,默认页的配置

    Tomcat的配置 1.配置环境变量 新建名为:CATALINA_HOME的系统变量,值为我们安装tomcat的目录 2端口号及编码的配置: 找到tomcat安装目录下的sonf下的server文件, ...

  9. 向GitHub上上传代码(转)

    使用git将项目上传到github(最简单方法)   首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下 ...

  10. OpenCV入门(1)- 简介

    1.图像的表示 在计算机看来,图像只是一些亮度各异的点,一副M*N的图片可以用M*N的矩阵来表示,矩阵的值表示这个位置上像素的亮度. 一般灰度图用二维矩阵来表示,彩色(多通道)图用三维矩阵表示,大部分 ...