2.4抽象数据的多重表示

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

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 实例:符合代数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值