摘要:
类型识别: 为什么引入类型识别呢?因为面向对象中有一个非常重要的原则就是赋值兼容性原则,就是子类对象完全可以当成父类对象使用。 当我们拿到指针p,我们知道它到底指向子类还是父类对象吗? p的静态类型是Base,本意是期望指向Base对象,但是由于赋值兼容性,指针有可能指向子类对象,子类对象在这里是动
阅读全文
posted @ 2018-09-06 21:27
周伯通789
阅读(166)
推荐(0)
摘要:
catch抛出异常: 为什么要在catch中抛出异常呢? 异常的重新解释实验: 运行结果如下: 如何使异常的信息更加丰富呢? 类类型的异常示例: C++标准库中提供了实用的异常类族 标准库中异常使用: Array.h HeepArray.h 主程序: 运行结果: 小结:
阅读全文
posted @ 2018-09-05 22:03
周伯通789
阅读(221)
推荐(0)
摘要:
C++异常: 示例程序: 运行结果如下: 异常类型匹配实验: 运行结果如下: 小结:
阅读全文
posted @ 2018-09-05 21:52
周伯通789
阅读(151)
推荐(0)
摘要:
异常处理: 异常处理的方式: 示例程序: 运行结果如下: 缺陷: 我们需要统一加减乘除的调用方法,将除法改为两个参数,而且还有异常处理的功能。 改进方法: 除法操作异常处理优化: 程序先执行28行,这是直接执行setjmp,就直接将程序执行上下文保存在env中,然后条件判断为真,然后执行第30行的除
阅读全文
posted @ 2018-09-05 21:21
周伯通789
阅读(176)
推荐(0)
摘要:
单例模式: 问题: 如何定义一个类,使得这个类只能创建一个对象? 示例: 运行结果如下: 可以看到这里打印的地址是一样的。 单例类对象在整个系统的运行过程中一般是不释放的。 存在的问题: 解决方案: 程序如下: 主函数: 第9行将使用当前类作为参数的类模板声明为友元,使得能够调用当前类的构造函数。
阅读全文
posted @ 2018-09-05 21:02
周伯通789
阅读(175)
推荐(0)
摘要:
智能指针的意义: STL中的智能指针: auto_ptr使用示例: 运行结果如下: STL中其它的智能指针: Qt中的智能指针: Qt智能指针示例: 运行结果如下: Qt中的其它智能指针: 智能指针类模板实现: 测试程序: 运行结果如下: 小结:
阅读全文
posted @ 2018-09-05 20:43
周伯通789
阅读(198)
推荐(0)
摘要:
预备知识: 有趣的面试题: 示例: 当编译器编译到第26行时,看到const就会将VALUE放入符号表,又看到了static,因此这个变量也进入了全局数据区。静态的const变量是可以在类中直接赋值的。 最快的求和程序如下: 运行结果如下: 完善程序: 第33行就是特化。 这是一个递归的过程。 运行
阅读全文
posted @ 2018-09-05 20:28
周伯通789
阅读(195)
推荐(0)
摘要:
多参数类模板: 特化: 上图特化的意义是将原来接收任意两个类型参数的模板特化为只能接收一种类型的两个参数。 这意味着如果定义类时我们给的两个参数是同种类型的,则编译器优先使用右边的这种模板实现。 一个类模板实际分开实现为两个部分,编译器根据具体的参数选择其中的一个模板。 编译器会认为上图中的两个Te
阅读全文
posted @ 2018-09-04 23:29
周伯通789
阅读(186)
推荐(0)
摘要:
思考: 在C++中能否将泛型的思想应用到类呢? 类模板: 类模板的应用: 实验: 运行结果如下: 编译器编译到16行发现两个string类型相减,而string类本身不支持这种相减操作,于是编译器去找string类型减法的重载,于是找到了28行的函数,最终编译成功,执行时也调用到了28行的重载函数。
阅读全文
posted @ 2018-09-04 23:11
周伯通789
阅读(283)
推荐(0)
摘要:
深入理解函数模板: 注意事项: 示例: 两个指针打印了不同的值,这说明编译器根据函数模板产生了两个具体的函数。 添加一个新类型: 结果如下: 我们将类的拷贝构造函数定义成私有的,编译器检测出了错误。 我们的模板是没有问题的,编译器在进行第一次编译时没有错误,并且产生一个参数类型为Test的函数。 在
阅读全文
posted @ 2018-09-04 22:47
周伯通789
阅读(177)
推荐(0)