Fork me on GitHub
摘要: 多重继承的虚函数表会有两个虚表指针,分别指向两个虚函数表,如下代码中的 vptr_s_1、vptr_s_2,Son类继承自 Father 和 Mather 类,并且改写了 Father::func_1 与 Mather::handle_1,这两个虚函数将会存放到两个虚函数表中,Son 新加的 fun 阅读全文
posted @ 2020-03-27 00:18 索智源 阅读(613) 评论(0) 推荐(0) 编辑
摘要: 1. 使用继承的虚函数表: 如果不涉及多重继承,每个类只有1个虚函数表,当子类继承父类后,子类可以自己改写和新增虚函数,如下图所示: 子类重写 func_1 后,子函数的 func_1 将会有新的逻辑,不会干扰到父类; 子类新增行的 func_4 方法后,父类无法访问到该方法。 如下代码: 1 #i 阅读全文
posted @ 2020-03-24 01:12 索智源 阅读(330) 评论(0) 推荐(0) 编辑
摘要: C++面试经常会被问的问题就是多态原理。如果对C++面向对象本质理解不是特别好,问到这里就会崩。 下面从基本到原理,详细说说多态的实现:虚函数 & 虚函数表。 1. 多态的本质: 形式上,使用统一的父类指针做一般性处理。但是实际执行时,这个指针可能指向子类对象。 形式上,原本调用父类的方法,但是实际 阅读全文
posted @ 2020-03-23 01:42 索智源 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 首先看下边的代码,先创建一个父类,然后在来一个继承父类的子类,两个类中都有自己的 play() 方法,在代码的第35-37行,创建一个父类指针,然后将子类地址引用赋值给父类,这时调用 P 指针的 play() 方法会打印出什么呢。开始我以为会是调用子类的 play() 方法,因为第36行给引用了,但 阅读全文
posted @ 2020-03-22 02:55 索智源 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 标准库里的异常类 C++标准提供了一组标准异常类,这些类以基类 Exception 开始,标准程序库抛出的所有异常,都派生于该基类,这些类构成如图所示的异常类的派生继承关系,该基类提供一个成员函数 what(),用于返回错误信息(返回类型为 const char*)。在 Exception 类中,w 阅读全文
posted @ 2020-03-20 01:07 索智源 阅读(1271) 评论(0) 推荐(1) 编辑
摘要: 异常处理的基本思想 C++的异常处理机制使得异常的引发和异常的处理不必在同一个函数中,这样低沉的函数可以着重解决具体问题,而不必过多的考虑异常的处理。上层调用者可以再适当的位置设计对不同类型异常的处理。 异常是专门针对抽象编程中的一系列错误进行处理的。C++中不能借助函数机制实现异常,因为栈结构的本 阅读全文
posted @ 2020-03-20 01:06 索智源 阅读(562) 评论(0) 推荐(0) 编辑
摘要: 异常和继承 异常也是类,我们可以创建自己的异常类,在异常中可以使用(虚函数,派生,引用传递和数据成员等), 下面用一个自制的数组容器Vector,在对Vector初始化时来对Vector的元素个数进行有效检查。以此来说明继承与异常的使用关系。 运行下方代码,Vector对象传不同参数进去,会触发相应 阅读全文
posted @ 2020-03-20 00:56 索智源 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 异常类型的生命周期 1. throw 基本类型: int、float、char 这三种类型的抛出和函数的返回传值类似,为参数拷贝的值传递。 1 int test_1(int num) throw (int, double, char) 2 { 3 if (num == 0) 4 { 5 throw 阅读全文
posted @ 2020-03-20 00:54 索智源 阅读(1003) 评论(0) 推荐(1) 编辑
摘要: 异常处理接口声明 1 一般为了方便程序员阅读代码,提高程序的可读性,会将函数中的异常类型声明至函数头后方,不用一行一行的找抛出内容: 2 这里要注意一点,这属于C++的标准语法,但在VS中这个操作不被承认,会抛出警告。 3 如果一个函数不想抛出任何异常,可以单写一个 throw() 声明。 1 in 阅读全文
posted @ 2020-03-20 00:48 索智源 阅读(588) 评论(0) 推荐(0) 编辑
摘要: 2. 异常处理的基本语法 下面是一个基本的代码例子,说明 throw、try、catch的基本用法,与 catch 的类型自动匹配: 1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 int test_1(i 阅读全文
posted @ 2020-03-20 00:47 索智源 阅读(606) 评论(0) 推荐(0) 编辑