【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章】定义抽象数据类型的更多相关文章
- <<C++ Primer>> 第 7 章 类
术语表 第 7 章 类 抽象数据类型(abstract data type): 封装(隐藏)了实现细节的数据结构. 访问说明符(access specifier): 包括关键字 public 和 ...
- [C++ Primer] 第7章: 类
定义抽象数据类型 定义在类内部的函数是隐式的inline函数. const成员函数 又叫做常量成员函数, 成员函数参数列表之后紧跟const关键字, const修饰的是类this指针. 默认情况下th ...
- C++ Primer Plus 第一章 预备知识
C++ Primer Plus 第一章 预备知识 知识点梳理 本章主要讲述了C++的由来,讨论了面向过程语言与面向对象语言的区别,介绍了ANSI/ISO制定的C++标准,阐述了在Windows.Mac ...
- 第二章 深入 C# 数据类型
第二章 深入 C# 数据类型 1.封装又称信息隐藏,是指利用抽象数据类型将数据和数据的操作结合在一起,使其构成一个不可分割的独立实体,尽可能的隐藏内部的细节,只保留一些对外接口,使之于外部发生联系. ...
- C++primer第三章标准库类型
除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...
- C++ Primer 第2章 变量和基本类型
C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...
- 逆向基础 C++ Primer Plus 第二章 开始学习C++
C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...
- 抽象数据类型ADT
ADT(Abstract Data Type) 类型由什么组成? 一个类型(type)指定两类信息,一个属性集和一个操作集. 假设要定义一个新的数据类型.首先,要提供存储数据的方式,可能是通过设计一个 ...
- C语言泛型编程--抽象数据类型
一.数据类型: 在任何编程语言中,数据类型作为一个整体,ANSI-C包含的类型为:int.double.char……,程序员很少满意语言本身提供的数据类型,一个简单的办法就是构造类似:array.st ...
随机推荐
- 学习windows编程 day3 之窗口绘画二:边框绘制函数
#include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM l ...
- CentOS下设置vim的tab键为4格
# vim /etc/vimrc 在最后一行添加 set softtabstop=4 或者set tabstop=4 或者在~/.vimrc中添加也可以 没有~/.vimrc文件可以创建一个 另: s ...
- Git Bash使用详细教程
https://blog.csdn.net/wangrenbao123/article/details/55511461/
- bzoj千题计划307:bzoj5248: [2018多省省队联测]一双木棋
https://www.lydsy.com/JudgeOnline/problem.php?id=5248 先手希望先手得分减后手得分最大,后手希望先手得分减后手得分最小 棋盘的局面一定是阶梯状,且从 ...
- HTML5的 input:file上传 以及 类型控制
以HTML5的文件上传API 如下demo代码在.html文件打开即可: !DOCTYPE html> <html lang="zh_cn"> <head& ...
- C# 生成一个带数字的饼图
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...
- JacobMathType
JACOB是一个 Java到微软的COM接口的桥梁.使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象,;MathType 是由美国Design Science公司开 ...
- [转]Linux/Windows下脚本对拍程序
[新]简单写法 (转载自:https://blog.csdn.net/ylsoi/article/details/79824655) 要求:文件输入输出,且输入输出文件需要对应 Linux: #inc ...
- Mybatis的分页插件PageHelper分页失效的原因
引用博客:个人博客地址:https://alexaccele.github.io/ PageHelper是Mybatis的一个很好的分页插件,但要使用它的分页功能需要注意一下几点 1.导入相关包,例如 ...
- NSOperation 代码,阐述NSOperation一般功能和重要功能
// // ViewController.m // 05-NSOperation // // Created by jerry on 15/9/5. // Copyright (c) 2015年 je ...