类型识别: 为什么引入类型识别呢?因为面向对象中有一个非常重要的原则就是赋值兼容性原则,就是子类对象完全可以当成父类对象使用。 当我们拿到指针p,我们知道它到底指向子类还是父类对象吗? p的静态类型是Base,本意是期望指向Base对象,但是由于赋值兼容性,指针有可能指向子类对象,子类对象在这里是动 ...
分类:
编程语言 时间:
2018-09-06 23:09:16
阅读次数:
238
上一节中,函数重写遇上赋值兼容出现了问题: 34、35行调用的都是父类中的print函数。 35行我们给的实参是Child对象,期望调用子类中的print函数,但是运行结果并不是这样。 函数重写回顾: 子类中重定义父类中已有的函数,就是因为父类中的函数满足不了我们的需求。 我们期望的是只要是子类对象 ...
分类:
其他好文 时间:
2018-09-03 00:00:25
阅读次数:
185
父子间的赋值兼容: 子类对象兼容性实验: 第40行我们可以直接使用子类对象来初始化父类对象。这就是赋值兼容性。 47、48不会发生同名覆盖,因为rp本身就是父类类型的引用,只不过引用的对象是子类对象。47、48行会直接去父类中找add函数,所以不会报错。 51、52行同时找不到mv和带三个参数的函数 ...
分类:
其他好文 时间:
2018-09-02 23:40:00
阅读次数:
196
我们在之前学习了 C++ 中有关异常的知识,现在我们来重新回顾下。那么异常的格式是什么呢?便是 try ... catch ...;try 语句处理正常的代码逻辑,而 catch 语句则处理异常情况,try 语句中的异常由对应的 catch 语句处理。 在 C++ 中,通过 throw 语句抛出异常信息。throw 抛出的异常必须被 catch 处理,当前函数如果能处理异常,程序将继续往下执行;如果当前函数无法处理异常则函数停止执行并返回。未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行。 同一个 try 语句可以跟上多个 catch 语句。catch 语句可以定义具体处理的异常类型,不同类型的异常由不同的 catch 语句负责处理;try 语句中可以抛出任何类型的异常,catch(...) 用于处理所有类型的异常,任何异常都只能被捕获(catch)一次
分类:
其他好文 时间:
2018-08-10 01:32:51
阅读次数:
206
一、总览 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface native new static strictfp synchronized transient vola ...
分类:
编程语言 时间:
2018-07-26 23:42:33
阅读次数:
181
C++语言学习(十一)——多态一、多态简介C++中的多态(polymorphism)是指由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。可以减轻系统升级,维护,调试的工作量和复杂度。多态是一种不同层次分类下的重要联系,是一种跨层操作。二、多态实现的前提赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代
分类:
编程语言 时间:
2018-07-21 00:14:32
阅读次数:
176
1 //虚析构函数的学习 2 //如果外部程序使用new运算符定义了动态对象,则当外部程序结束时,要使用delete运算符删除该动态对象. 3 //但是如果外部程序利用赋值兼容原则,把动态申请的派生类对象地址赋给了基类对象指针,由于delete运算符隐含有析构函数的自动调用 4 //因此此时系统自动... ...
分类:
编程语言 时间:
2018-07-01 18:21:27
阅读次数:
150
在子类继承父类后,子类对象便可以当做父类对象使用了(兼容性)。包括:1、子类对象可以直接赋值给父类对象;2、子类对象可以直接初始化父类对象;3、父类对象可以直接指向子类对象;4、父类引用可以直接引用子类对象。下来我们来说下当使用父类指针(引用)指向子类对象时,子类对象便退化为父类对象,只能访问父类中定义的成员,可以直接访问被子类覆盖的同名成员。
分类:
其他好文 时间:
2018-05-28 17:25:17
阅读次数:
120
本篇开始正式进入数据结构的相关内容,目标是基于C++语言,设计一个可复用的数据结构类库DTLib。 1. C++异常类简介 - C++异常的类型可以是自定义类类型 - catch语句对于类类型异常的匹配,依旧是自上而下严格匹配 - 赋值兼容性原则(在出现父类对象的地方,可以用一个子类对象来代替)在异 ...
分类:
其他好文 时间:
2018-05-20 15:24:54
阅读次数:
156
多态 问题引出(赋值兼容性原则遇上函数重写) 面向对象新需求 C++提供的多态解决方案 多态案例 多态工程意义 面向对象三大概念、三种境界(封装、继承、多态) 多态成立条件 总结条件、看代码的时候要看出多态 1多态 1.1问题引出 如果子类定义了与父类中原型相同的函数会发生什么? 函数重写 在子类中... ...
分类:
编程语言 时间:
2018-05-01 12:41:07
阅读次数:
307