7.1定义抽象数据类型
来源:互联网 发布:淘宝联盟怎么提现 编辑:程序博客网 时间:2024/05/17 22:02
定义改进的Sale_data类
成员函数的声明必须在类的内部,它的定义则既可以在类的内部也可以类的外部。作为接口组成部分的成员函数,它们的声明和定义都在类的外部。
struct Sales_data { std::string isbn() const {return bookNo;} Sales_data& combine(const Sales_data&); double avg_price() const; std::string bookNo; unsigned units_sold=0; double revenue=0.0;};//Sales_data的非成员接口函数Sales_data add(const Sales_data&, const Sales_data&);std::ostream &print(std::ostream&, const Sales_data&);std::istream &read(std::istream, Sales_data&);
成员函数的声明必须在类的内部,它的定义既可以在类的内部也可以在类的外部;作为接口的非成员函数,它们的定义和声明都在类的外部。
//常量成员函数
std::string isbn() const {return bookNo;}
定义成员函数
尽管所有成员函数都必须在类的内部声明,但是成员函数可以定义在类外。
例如:
Std::string isbn() const {return this->bookNo;}
引入this
#include <iostream>#include <string>using namespace std;struct Sales_data{ std::string isbn() const { return this->bookNo; } Sales_data& combine(const Sales_data&); double avg_price() const; std::string bookNo = "1111"; unsigned units_sold = 0; double revenue = 0.0;};//Sales_data的非成员接口函数Sales_data add(const Sales_data&, const Sales_data&);std::ostream &print(std::ostream&, const Sales_data&);std::istream &read(std::istream, Sales_data&);int main(){ Sales_data total; total.isbn(); return 0;}
引入const成员函数:
在默认情况下,this的类型是指向类类型非常量版本的常量指针。例如在Sales_item成员中,this的类型是Sales_item *const。这样我们就不能把this绑定到一个常量对象上。这情况使我们不能再一个常量对象上调用普通的成员函数。如果isbn是一个普通函数并且this是一个普通的指针参数,则我们应该把this声明成const Sales_item *const。C++语法中允许const关键字放在成员函数的参数列表之后。参数后面的const表示this是一个指向常量的指针。
在类的外部定义成员函数:
当我们在类的外部定义成员函数时,成员函数的定义必须与它声明匹配。也就是说,返回类型,参数列表和函数名都得与类内部的声明保持一致。如果成员函数被声明为常量成员函数,那么它的定义也必须在参数列表后明确指定const属性。类外部定义的成员的名字必须包含它所属的类名:
double Sales_data::avg_price() const{ if(units_sold) return revenue/units_sold; else return 0;}
定义一个返回this对象的函数:
定义类相关的非成员函数:
#include <iostream>#include <string>using namespace std;class Sales_data{ friend Sales_data add(const Sales_data &lhs, const Sales_data &rhs); friend std::ostream &print(std::ostream &os, const Sales_data &item); friend std::istream &read(std::istream &is, Sales_data &item);public: std::string isbn()const{ return bookNo; } double avg_price()const; Sales_data& combine(const Sales_data &rhs) { units_sold += rhs.units_sold;//累加书籍的销售量 saleprice = (rhs.saleprice*rhs.units_sold + saleprice*units_sold) / (rhs.units_sold + units_sold);//重新计算实际销售价格 if (sellingprice != 0) discount = saleprice / sellingprice;//重新计算实际折扣 return *this;//返回合并后的结果 }private: std::string bookNo;//书籍编号 unsigned units_sold = 0;//销售量 double sellingprice = 0.0;//原始价格 double saleprice = 0.0;//实售价格 double discount = 0.0;//折扣 double revenue = 0.0;};//在类的外部定义成员函数double Sales_data::avg_price()const{ if (units_sold) return revenue / units_sold;}//Sales_data的非成员接口函数Sales_data add(const Sales_data &lhs, const Sales_data &rhs){ Sales_data sum = lhs; sum.combine(rhs); return sum;}std::ostream &print(std::ostream &os, const Sales_data &item){ os << item.isbn() << " " << item.units_sold << " " << item.sellingprice << " " << item.saleprice << " " << item.discount; return os;}std::istream &read(std::istream &is, Sales_data &item){ is >> item.bookNo >> item.units_sold >> item.sellingprice >> item.saleprice; return is;}int main(){ return 0;}
- 7.1定义抽象数据类型
- C++ Primer读书笔记7.1:定义抽象数据类型
- 抽象数据类型的定义
- 抽象数据类型定义(ADT)
- 抽象数据类型定义(ADT)
- C++primer学习笔记-----7.1定义抽象数据类型
- 抽象数据类型线性表的定义
- accelerated cpp chapter 11 定义抽象数据类型
- 第11章 定义抽象数据类型
- 抽象数据类型三元组的定义
- 【足迹C++primer】15、定义抽象数据类型
- 成绩表的抽象数据类型定义(ENGLISHSCORE LIST)
- 抽象数据类型线性表的定义
- 第11章 定义抽象数据类型(续)
- C++ 标准库定义了更高级的抽象数据类型
- 抽象数据类型线性表的定义—链表操作
- 抽象数据类型线性表的定义—静态单链表
- 串的抽象数据类型ADT 定义串的一些操作
- ios开发中经典应用高仿项目分享<一>
- 经典文章集合
- 网络安全实验室基础关 writeup
- KMP算法
- C++调用C
- 7.1定义抽象数据类型
- mysql 存储过程
- Choose a journaling file system
- c工程开发需要什么
- SQL Server 2008报错:无法连接到(local)本地服务器的解决方案
- LeetCode题解(二)
- 顺序表及相关操作
- 关于handler机制(结合源码及方法的调用去总结)
- ext3 jornal mode