简介异常处理

在〈定义类〉中,Account 的 deposit 及 withdraw,在参数值 amount 不正确时,都是直接显示文本模式下的消息后直接 return,如果这个类不只使用在文本模式中呢? 这.........

多重继承的复杂

继承本身就会令事情复杂化,多重继承更是会令复杂度加剧,〈虚拟继承〉中看到的不过是部份情况。 同名的方法或值域若在子类中可见,就必须处理名称重叠时的相关议题(在子类中不可见的值域或方法,代码编写上本来.........

虚拟继承

类若继承两个以上的抽象类,而两个抽象类都定义了相同方法,那么子类会怎样吗?程序面上来说,并不会有错误,照样通过编译: class Task { public: virtual void.........

多重继承的构造

如〈继承共同行为〉中看过的,在单一继承时,情况比较单纯,构造子类实例时,会先执行父类构造函数,接着是子类构造函数,而解构的时候相反,会先执行子类析构函数,接着才是父类析构函数。 多重继承时,若继承来源之一有状.........

多重继承

继承本身就具有复杂性,在设计上并不鼓励,在可以使用其他设计方式替代的场合,例如合成(composite),往往建议别使用继承;C++ 可以多重继承,也就是子类可以同时继承多个父类,既然单一继承已经有.........

RTTI

RTTI 全名为 Run-Time Type Information,也有人写作 Run-Time Type Identification,代表着执行时期获取对象的类型信息,在 C++ 中,可以使用定.........

模版与继承

C++ 可以定义类模版,在继承时对象也可以使用模版,不过并不鼓励这种做法,例如,你也许会想要量测某个方法的执行时间,为了可以重用量测用的代码,或许会采用这样的设计: #include <io.........

纯虚拟函数(二)

在定义类时,可以完全只有纯虚拟函数,完全不提供实现,也没有任何状态定义,将类当成是一种行为规范。 来个简单的需求演变情境,以说明为什么要有这种类。老板今天想开发一个海洋乐园游戏,当中所有东西都会.........

纯虚拟函数(一)

在〈虚拟函数〉中,将 to_string 设成 virtual 了,然而你可能会发现,Role 的子类都有 fight 方法,为什么不将它们提升至父类并设为 virtual?可以是可以,不过提升之.........

虚拟函数

在〈遮敝父类方法〉中看到,在继承关系下,基于 is-a,子类实例可以指定给父类类型,如果你这么做,多数情况下想要的效果是,想以一般化的方式来操作实例,无论该实例是父类或子类实例。 例如,Role、Sw.........

覆盖父类方法

在〈继承共同行为〉中,Role 的 to_string 被继承了,然而,你也许会想要 SwordsMan、Magician 各自的 to_string,可以有类名称作为前置,这个需求可以借由在各自的.........

继承共同行为

子类继承父类,可用来避免重复的行为,不过并非为了避免重复定义行为就使用继承,滥用继承而导致程序维护上的问题时有所闻,如何正确判断使用继承的时机,以及继承之后如何活用多态,才是学习继承时的重点。 无.........