C++
文章平均质量分 77
ENSHADOWER
明天是复杂的漫游
展开
-
C++继承(基础)
赋值兼容规则 public继承方式下,派生类对象可以赋值给基类的对象/指针/引用,但是基类不能赋值给派生类。可以将派生类的对象看成是基类的对象 在使用基类对象的位置,都可以使用派生类对象进行替换 基类的指针/引用可以指向派生类的对象派生类的默认成员函数若基类的构造函数存在:基类为缺省的构造函数:如果派生类没有显式定义构造函数,编译器就生成一个默认的构造函数,要...原创 2018-12-27 10:39:37 · 481 阅读 · 0 评论 -
C++:派生类指针赋值给基类指针问题
在C++继承中,很容易遇到一个问题,那就是将派生类指针赋值给基类指针(向上转型)的情况,下面我们就来举例分析:举一个多继承的例子:#include <iostream>using namespace std;//基类Aclass A {public: A(int a);public: void display();protected: int m_a;...原创 2019-07-20 22:55:12 · 6764 阅读 · 7 评论 -
C++:基类析构函数为什么要定义为虚函数
在C++实现多态里,有一个关于 析构函数的重写问题:基类中的析构函数如果是虚函数,那么派生类的析构函数就重写了基类的析构函数。这里他们的函数名不相同,看起来违背了重写的规则,但实际上编译器对析构函数的名称做了特殊处理,编译后析构函数的名称统一处理成destructor。那么为什么要把基类中的析构函数写成虚函数呢?原因:当基类指针指向派生类的时候,若基类析构函数不声明为虚函数...原创 2019-07-19 15:51:39 · 8693 阅读 · 3 评论 -
C++:模板总结
目录模板 函数模板: 类模板:模板一、定义: 模板是泛型编程的基础。(泛型:任意类型) 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。二、分类: 模板分为两类:函数模板:函数模板必须由编译器根据程序员的调用类型实例化为可执行的函数。 类模板三、优缺点: 优点:模板复用...原创 2019-05-12 14:24:07 · 196 阅读 · 0 评论 -
C++多态(基础)
继承可以实现代码复用,但它的主要用处是可以实现多态。多态一、概念 多态是指完成某个行为时,当不同的对象去完成会产生出不同的状态 举个例子:买票的时候,成人票全价,儿童票半价 简单的说:就是用基类的引用指向子类的对象。二、分类①动态多态:在程序运行时确定函数行为。(动态绑定,晚绑定)虚函数的重写(覆盖):派生类中有一个跟基...原创 2019-01-15 22:32:44 · 306 阅读 · 0 评论 -
C++多态之常见面试题
什么是多态?答:多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。 通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。什么是重载、重写(覆盖)、重定义(隐藏)?答:C++中不能进行函数重载的操作符:“?:” 、“.” 、“::” 、“sizeof” 和 ”.*”多态的实现原理?答:虚函数表。...原创 2019-01-20 16:00:56 · 864 阅读 · 0 评论 -
C++多态之虚函数表
上一篇里我们学习了多态的基本概念,下面我们就来看看C++到底是如何实现多态的:一、虚函数表下面这个基类中只包含一个int型的成员变量,但利用sizeof求类的大小结果却是8我们来看看b对象里都包含了什么:通过观察测试我们发现: 除了_b成员,还多一个__vfptr放在对象的前面,对象中的这个指针我们叫做虚函数表指针(v代表virtual,f代表 fun...原创 2019-01-20 14:07:19 · 419 阅读 · 0 评论 -
C++:inline与#define的区别
内联函数inline概念: 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 从而能够提升程序运行的效率。特性:inline是一种以空间换时间的做法,省去调用函数的开销。所以代码很长或者有循环/递归的函数不适宜作为内联函数。 inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内...原创 2019-01-24 20:53:39 · 432 阅读 · 0 评论 -
C++继承之菱形继承
在学习菱形继承之前,我们先了解两个概念:单继承、多继承。单继承:一个子类只有一个直接父类时称这个继承关系为单继承。 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承。 菱形继承 菱形继承是多继承的一种特殊情况。 接下来我们...原创 2018-12-27 12:30:49 · 619 阅读 · 0 评论 -
C++:浅析智能指针
智能指针是为了解决C++里防止程序员因为忘记释放资源而造成内存泄漏的问题RAII RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。 在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时...原创 2019-07-22 12:33:35 · 296 阅读 · 0 评论