2.4抽象数据的多重表示

来源:互联网 发布:oppo手机mac地址查询 编辑:程序博客网 时间:2024/05/16 18:03

计算机程序的构造和解释(笔记)

2.4抽象数据的多重表示

2.4.1 复数的表示

数据抽象已经介绍过了,具体看之前的2.1数据抽象引导

这里介绍的是抽象数据的多重表示(个人理解类似overload重载,忽略类中的具体函数实现,直接使用对应的函数中的方法method)

书上给的是一个复数实现的例子,分别使用直角坐标表示 和 极坐标表示法,来实现底层的封装

复数的封装.png

例如上述中的复数运算add或mul-comoplex,可以忽略底层是哪个实现的,只要计算时候调用正确就可以。

2.4.2 带标志数据

值得是给一个标志来区分底层具体使用 直角坐标表示 和 极坐标表示法的哪一个

类似C++ 的 前置++ 和后置++ 的重载operator的实现吧

这里具体一点:

// 前置版本,返回递增对象的引用class ClassA{  classA& operator++();  ...};ClassA& ClassA::operator++(){  ++curr;  return *this;}// 后置版本,返回递增对象的原值// 注意加入一个额外的(不被使用的)int类型的形参,仅仅为了区分ClassA{  classA& operator++(int);  ...};classA ClassA::operator++(int){  ClassA ret= *this ;  // 保存当前值  ++*this;  return ret ;}// 调用:ClassA a;a.operator++();  //前置版本a.operator++(0); //后置版本

2.4.3 数据导向的程序设计的可加性

2.5 带有通用型操作的系统

2.5.1 通用形算术运算

这里我参照C++prime的chap14 函数调用运算符来理解,也就是忽略参数的类型的不同,但最终调用的方法相同

也就是:
通用形算术系统.png

2.5.2 不同类型的数据结合

  • 强制

这里说的应该是cast

  • 类型的层次结构(对比oop中的对象继承吧)

这里有几个概念:

    • 类型塔

类型塔

    • 子类型 :(也就是子类啦)例如整数是有理数的子类,对于有理数的操作都可以应用于整数
    • 超类型:(父类) 这里有理数是整数的父类
  • 层次结构的不足

这里果然谈到了多重继承,类之间的继承不是单一等问题哈哈o(*≧▽≦)ツ

问题如下图:

多重继承问题.png

2.5.3 实例:符合代数

有事暂时意识流了,习题不想看…. ╮( ̄▽ ̄”)╭

原创粉丝点击