C++
zhuoya_
在光亮中,世界始终是我们最初和最后的爱。
展开
-
.o/.obj 文件的组成格式
一个.c/.cpp文件通过编译形成的可重定位的二进制目标文件的格式。原创 2017-10-30 22:49:38 · 11964 阅读 · 5 评论 -
C++中同名函数之间的关系
在C++中同名函数有三种关系:重载(overlode):相同作用域;函数名相同;参数列表不同(参数类型不同,或者参数个数不同,或者参数个数和参数类型都不相同);返回类型随意。 覆盖(override):不同作用域下(分别在父类和子类中);函数名相同;参数列表列表相同;返回类型相同(协变除外);基类函数必须有virtual修饰;父类和子类的访问限定可以不同。 隐藏(overhide):不同作...原创 2018-07-24 23:24:45 · 24937 阅读 · 0 评论 -
C++中的写时拷贝
一、什么是写时拷贝?就是当你再读取一片空间时,系统并不会为你开辟一个一模一样的空间给你;只有在当你真正修改的时候,才会开辟一片空间给你。二、怎么实现写时拷贝呢?(1)、使用引用计数来实现。所有我们在分配空间时需要多分配4个字节,来记录有多少个指针指向这个空间。(2)、有新的指针指向这篇空间时,那么引用计数就加一;当有一个指针要释放该空间时,那么引用计数就减一。(3)、当有指针要修改这片空间时,则为...原创 2018-06-09 20:48:49 · 864 阅读 · 3 评论 -
虚函数
本篇目录************************************* 什么是虚函数 ** 虚函数指针以及虚函数表 ** 成为虚函数的条件 ** 虚函数的生存周期 ** 为什么要使用虚析构函数 ...原创 2018-05-13 11:22:22 · 4793 阅读 · 1 评论 -
OOP思想--多态
本篇的目录************************************* 静多态 ** 动多态 ** 多态产生的条件 ** 抽象类 ...原创 2018-05-12 21:10:03 · 535 阅读 · 0 评论 -
OOP思想--封装和继承
本篇主要讲面向对象的封装和继承特性,另一个特性多态会在后面的文章中讲到。目录: 面向对象编程过程 封装的实现 继承的方式 继承后对象的构造顺序 继承的种类一、什么是面向对象编程(Object Oriented programming,OOP)思想?在学习C++之前我们一直说面向过程,也就是对于一个需要解决的问题,进行分析,得出每个步骤的实现和实现顺序的过程。所以自然而然的就能够进行面向过...原创 2018-04-21 11:45:18 · 492 阅读 · 0 评论 -
智能指针相关问题解答
Q、智能指针都有哪些呢?C++11之前:auto_ptrC++11:unique_ptr share_ptr weak_ptrBoost库:scrope_ptr share_ptr weak_ptrQ、为何选择智能指针?智能指针解决了什么问题?智能指针的出现肯定是与普通指针存在的缺点相对应的,所有的事物都是在进步的嘛!想想普通指针,容易发生的两个缺点:(1)、程序员自己忘了写释放资...原创 2018-04-14 10:46:34 · 578 阅读 · 0 评论 -
C++中对象的内存布局(三)
给出这样的重复继承:(一)、直接继承,没有虚函数存在时,书写如下:class CA{……};class CB:public CA{……};class CC:public CA{……};class CD:public CB,public: CC{……};查看内存布局如下:由于B和C都继承了A,所以在D中重复出现了A中的成员变量,所以当试图访问间接基类中的成员变量时,务必要加上作用域。当...原创 2018-04-23 21:07:32 · 878 阅读 · 0 评论 -
C++中对象的内存布局(二)
多重继承(继承关系大于一)下对象的内存布局如何呢?下面给出一个这样的继承关系:编写代码如下:class Base1{public: Base1(int a=10,int b=100):ma1(a),mb1(b){} virtual void b1(){cout<<"Base1::b1()"<<" ";} virtual void bb1(){cout<<...原创 2018-04-23 13:02:40 · 186 阅读 · 0 评论 -
c++设计模式---单例模式
一、什么是单例模式?只能实现一个实例的类就是单例模式。单例模式是一种常见的软件设计模式。单例模式中生成的唯一的实例易于外界访问,从而方便对实例个数的控制并节省资源。二、怎么实现单例模式?(1)、把构造函数申明为private或者protected,禁止他人创建。(2)、内部定义一个静态的实例,实例的动作由一个public的类方法代劳。三、实现方式:懒汉模式和饿汉模式。(1)、懒汉模式:延迟加载,直...原创 2018-04-13 11:30:27 · 168 阅读 · 0 评论 -
C++中对象的内存布局(一)
在上篇文章《戳我》中,简单说了继承的三种分类:单继承、多重继承、重复继承。一般的如果没有虚函数,那对象的内存布局就如我们看到的一样,定义了几个变量根据字节对齐就能算出其在内存中所占字节大小。但是有了虚函数,就不同了,因为有了虚函数就意味着存在虚函数指针,那指针我们知道是占四个字节(32位)的,所以从本篇文章开始来分析存在虚函数时对象的内存布局是怎么样的?(版本是Visual Studio2012)...原创 2018-04-22 12:53:00 · 1906 阅读 · 0 评论 -
c++标准模板库STL之基础
一、STL分类容器类(container)(1)顺序容器:vector:内存成倍增长的动态数组deque:动态开辟的二维数组list:双向链表(2)关联容器:set:单重集合 红黑树mutiset:多重集合 红黑树map:单重映射 红黑树mutimap:多重映射 红黑树(3)容器适配器:stackqueuepri...原创 2018-03-22 09:43:11 · 513 阅读 · 0 评论 -
STL中vector的扩容和回收
一、求容器大小的函数:size():返回当前vector元素的个数。capacity():返回当前vector中最大能够存储的元素的个数。二、扩容的两种情况:情况1:当元素添加时导致的扩容。int main(){ vector<int> vec; //扩容1:当元素添加时导致的扩容。VS2012采用的是1.5倍的扩容方式 for(int i=0;i&l...原创 2018-03-22 23:02:53 · 9578 阅读 · 0 评论 -
C++运算符重载函数
在C++中不可重载的运算符有:::sizeof? ::.->可重载的运算符有:===!=*()[]+*newdelete其中注意一下:C++中new和delete与C语言中malloc和free不一样。C语言中malloc和free市库函数;在C++中new和delete是运算符;在使用new时相当于默认使用构造函数+mall原创 2017-12-03 11:21:48 · 1003 阅读 · 0 评论 -
C++中实例化出的对象的生存周期
c++中实例化出的对象的生存周期。原创 2017-11-16 22:46:33 · 1976 阅读 · 2 评论 -
.c/.cpp文件形成.exe文件的过程
以上就是整个编译链接过程中所要做的事情。原创 2017-10-30 20:52:00 · 3737 阅读 · 0 评论 -
C++中的四中类型转换
const_cast<type_new>(expression)取常性类型转换。主要用于对变量的常量性转换,可以让非常量指针或者引用来指向常量。//const_cast<new_type>(expression)#include<iostream>using namespace std;class A{public: A(int dat...原创 2018-08-07 17:30:09 · 591 阅读 · 0 评论