第七章_类_7.1 定义抽象数据类型

本文详细介绍了C++中的类,重点讨论了如何定义抽象数据类型(ADT)Sales_data,包括其接口设计、成员函数定义、构造函数、拷贝赋值和析构函数。通过类实现数据抽象和封装,强调了常量成员函数的重要性,并探讨了在类外部定义成员函数的规则。同时,文章阐述了非成员函数在类接口中的角色,如read、print和add函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类的基本思想是 数据抽象(data abstraction)封装(encapsulation)

数据抽象是一种依赖于 接口(interface)实现(implementation) 分离的编程技术。

类的接口包括用户所能执行的操作;类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。

7.1 定义抽象数据类型

封装实现了类的接口和实现的分离。

类要想实现数据抽象和封装,需要首先定义个抽象数据类型(abstract data type)

7.1.1 设计 Sales_data 类

Sales_data 的接口应包含以下操作:

  • 一个 isbn 成员函数,用于返回对象的 ISBN 编号
  • 一个 combine 成员函数,用于将一个 Sales_data 对象加到另外一个对象上
  • 一个名为 add 的函数,执行两个 Sales_data 对象的加法
  • 一个名为 read 的函数,将数据从 istream 读入到 Sales_data 对象中
  • 一个 print 函数,将 Sales_data 对象的值输出到 ostream

使用改进的 Sales_data 类

Sales_data total; 				// 保存当前求和结果的变量
if (read(cin, total)){
     		// 读入第一笔交易
    Sales_data trans;   		// 保存下一条交易记录数据的变量
    while(read(cin, trans)){
       // 读入剩余的交易
        if(total.isbn() == trans.isbn()) 	// 检查 isbn
            total.combine(trans); 			// 更新变量 total 当前的值
        else {
   
            print(cout, total) << endl; 	// 输出结果
            total = trans; 					// 处理下一本书
        }
    }
    print(cout, total) << endl; // 输出最后一条交易
} else {
     						// 没有输入任何信息
    cerr << "No data?" << endl; // 通知用户
}

7.1.2 定义改进的 Sales_data 类

定义和声明成员函数的方式与普通函数差不多。

成员函数的声明必须在类的内部,它的定义即可以在类的内部也可以在类的外部。作为接口组成部分的非成员函数,定义和声明都在类的外部。

改进的 Sales_data 类如下所示:

struct Sales_data {
   
    // 新成员:关于 Sales_data 对象的操作
    std::string isbn() const {
    return bookNo; }
    // std::string isbn() const { return this->bookNo;} // 也可以这么定义
    Sales_data& combine(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值