![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
灵魂胖子
这个作者很懒,什么都没留下…
展开
-
多态与虚函数
多态与虚函数在引入虚函数概念之前,我们先看这个例子class Person{public: void BuyTickets() { cout << "person: 买票-全价" << endl; }protected: string _name; // 姓名原创 2018-07-27 16:36:48 · 154 阅读 · 0 评论 -
继承
继承简单的继承关系: 基类成员在派生类中的访问属性: 继承方式 基类的public成员 基类的protected成员 public继承 仍为public成员 不可见 protected继承 变为protected成员 不可见 private继承 变为private成员 不可见总结:1.基类中的公有成员。...原创 2018-07-27 11:08:18 · 135 阅读 · 0 评论 -
C++多态对象模型
单继承&多继承前面介绍的是单继承,即一个类是从一个父类派生而来的。但实际上,常常有这样的情况,一个子类有两个或多个父类,子类从两个或多个父类中继承所需的属性。单继承:一个子类只有一个直接父类。多继承:一个子类有两个或两个以上的父类。 探索虚函数表每一个具有虚函数的类都叫做多态类。这个虚函数或者是从基类继承来的,或者是自己新增加的。C++编译器必须为每一个多态类至少创...原创 2018-07-30 00:22:37 · 215 阅读 · 0 评论 -
String —— 深浅拷贝
String —— 深浅拷贝 浅拷贝就是由默认的拷贝构造函数和赋值运算符重载所实现的数据成员逐一赋值。通常默认的函数是能够胜任此工作的,但若类中含有指针类型的数据,这种按数据成员逐一赋值的方法将会产生错误。为了解决浅拷贝出现的错误,必须显示地定义一个自己的拷贝构造函数,使其不但复制数据成员,而且为对象分配各自的内存空间,这就是所谓的深拷贝。 1、原有的内存没有释...原创 2018-07-07 22:06:04 · 141 阅读 · 0 评论 -
String —— 写时拷贝技术(Copy-On-Write)
String —— 写时拷贝技术(Copy-On-Write)1.往磁盘里写东西时,其实是先写到内存,只有当我们关闭文件或刷新时,才会真正写到磁盘。2.把某个对象的值赋值给另一个变量时,这个变量默认指向与原来对象相同的空间,只有真正修改其当中的内容时,才会对其分配空间。int main(){ string s1("hello"); string s2 = s1; prin...原创 2018-07-08 17:22:37 · 435 阅读 · 0 评论 -
拷贝构造函数起作用的三种情况
拷贝构造函数起作用的三种情况:1.当用类的对象去初始化同类的另一个对象时。Date d2(d1);Date d2 = d1; //初始化语句,并非赋值语句。2.当函数的形参是类的对象,调用函数进行形参和实参结合时。void Func(A a1) //形参是类Date的对象a1{ }int main( ){ A a Func(a2); //调用Func时,实参a2是类Da...原创 2018-05-08 08:01:17 · 1893 阅读 · 0 评论 -
模板——类型萃取
模板——类型萃取类型萃取,在STL中用到的比较多,用于判断一个变量是否为POD类型(平凡类型)。简单来说可以用来判断出某个变量是内置类型还是自定义类型。通过类型萃取,萃取到变量类型,对不同变量进行不同处理,以提升程序的效率。应用场景:在拷贝对象时,对于内置类型我们用memcpy来进行赋值( 浅拷贝相关的类也可以通过memcpy赋值)。对于自定义类型,且大多数深拷贝的对象来说,我们必须通过调用for...原创 2018-04-05 17:54:54 · 211 阅读 · 0 评论 -
智能指针
智能指针 —— 指针 + RAIIRAII:资源分配即初始化。定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化。在析构函数完成资源的清理,可以保证资源的正确初始化和释放。智能指针的发展历史及设计思想和缺陷早期C++98 auto_ptr ——管理权转移. 这种方式...原创 2018-04-09 19:11:30 · 94 阅读 · 0 评论 -
模板的分离编译
模板的分离编译分析为什么模板不支持分离编译?首先,我们要弄清楚程序是怎么运行起来的,在《深入理解计算机系统》这本书上详细介绍了,在这里我简单的说一下。大致要经过以下四步:预处理:宏替换、头文件的展开、去掉注释、条件编译编译:检查语法、生成汇编代码汇编:汇编代码转化为机器码链接:可执行程序在实现分离编译的时候,我们通常在template.h中对在类中需要用到的函数进行声明,然后再template.c...原创 2018-03-23 19:09:47 · 301 阅读 · 2 评论 -
类和对象
类和对象 类的构成:class 类名{public: 公有数据成员; 公有成员函数:protected: 保护数据成员; 保护成员函数:private: 私有数据成员; 私有成员函数:};类的声明由关键字class打头,后跟类名,花括号中是类体,最后以一个分号“;”结束。构造函数是一种特殊的成员函数,名字必须和类名相同,可以有参...原创 2018-03-23 16:30:49 · 148 阅读 · 0 评论 -
C++ 指针、引用、const
C++指针、引用、const命名空间 用来处理程序中常见的同名冲突问题。 所谓的命名空间,实际上就是一个有程序设计者命名的内存区域。 除了用户可以声明自己的 命名空间外,C++还定义了一个标准的命名空间std。 方法有两种:在源文件中使用"using namespace std"语句。 using指令告诉编辑器:如果没有特别指明,下面出现的名字将尝试在指...原创 2017-11-25 20:18:27 · 169 阅读 · 0 评论 -
C/C++动态内存管理
C/C++动态内存管理内存分配的方式有3种:1、从静态存储区域分配 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如:全局变量、static变量。 2、在栈上分配 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。效率很高,但是分配的内存容量有限,可能出现栈溢出。 3、从堆上分配(动态内存分配) 程序在运行时候...原创 2018-08-16 18:13:17 · 275 阅读 · 2 评论