![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
西西^^
这个作者很懒,什么都没留下…
展开
-
C++----编译链接原理
编译链接可分为四个阶段1、预编译(生成.i文件)(1).将所有的“#define"删除,并且展开所有的宏定义;(2)处理所有条件预编译指令,比如:“#if","#ifend"(3)处理"#include"预编译指令,将包含的文件插入到该预编译指令的位置,这个过程是** 递归的**,也就是说被包含的文件可能还包含其他文件(4)删除所有的注释(5)添加行号和文件名标识,原创 2019-01-08 21:42:33 · 273 阅读 · 0 评论 -
迭代器
一、什么是迭代器迭代器是一种检查容器内元素并遍历元素的数据类型。容器提供了begin 和 end 接口,每种容器都定义了自己的迭代器类型二、定义与初始化vector<int> ivec;vector<int>::iterator iter1=ivec.bengin(); //将迭代器iter1初始化为指向ivec容器的第一个元素vector&l...原创 2019-05-27 18:44:38 · 146 阅读 · 0 评论 -
纯虚函数
拥有纯虚函数的类就是一个抽象类,不能生成对象(1)抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。(2)C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。(3)C++中的纯虚函数也是一种“运行时多态”。简单使用:class Animal{public: Animal(std :: string name) :mname(na...原创 2019-05-27 17:37:55 · 382 阅读 · 0 评论 -
继承与多态
多态可以理解成“一个接口‘多种形态’”多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。而如果函数调用的地址不能在编译器期间确定,需要在运行时才确定,这就属于晚绑定,是动多态。在东多态过程中,会将函数的入口地址放在.rodata段,加载到内存中那么多态的作用是什么呢,封装可以使得代码模块...原创 2019-05-27 17:09:53 · 88 阅读 · 0 评论 -
继承与派生
一、通过继承,我们可以用原来的数据类型来定义一个新的数据类型,定义的新类型既有原来数据中的成员,也能自己添加新的成员我们一般把原来的数据类型称为基类或者父类,新的数据类型为派生类,或者子类,在本篇博客中Base为基类,Deriver为派生类继承的本质是代码复用如上图所示继承与派生的关系class Base{public: Base(int a = 0) :ma(a){} void ...原创 2019-05-18 11:05:21 · 155 阅读 · 0 评论 -
单例模式
1、思想:一个类只能生成一个对象,为了确保在类外不能生成新的对象,所以要把构造函数和拷贝构造函数屏蔽起来,外部不能生成对象,所以在内部提供生成唯一对象的接口2、实现(1)这个接口的返回值不能返回类类型,因为会生成临时对象,(2)不能是普通的成员方法,因为普通的成员方法要依赖对象来调动,而这个接口函数就是为了生成对象,因此要摆脱对对象的依赖,因此为静态的成员方法3、代码(1)懒汉模式---...原创 2019-05-17 21:10:28 · 122 阅读 · 0 评论 -
对象的生存周期
以以下代码为例class CGoods{public: CGoods(char* name, int amount, float price) { std::cout << this << " :CGoods::CGoods(char*,int,float)" << std::endl; mname = new char[strlen(name...原创 2019-05-17 19:23:12 · 157 阅读 · 0 评论 -
C++-----static修饰的成员变量和成员方法
一、static修饰的成员变量 class Test { public: Test(int a,int b):**mb(a),ma(a)** {} void Show() { cout<<"ma:"<...原创 2019-05-16 19:56:13 · 838 阅读 · 0 评论 -
C++----const修饰的成员对象与成员方法
一、常对象为什么不能调用普通的成员方法class Test{public:Test(int a,int b):mb(a),ma(a){}void Show(){cout<<“ma:”<<ma<<endl;cout<<“mb”<<mb<<endl;}private:int ma;int mb;};...原创 2019-05-16 19:31:01 · 692 阅读 · 0 评论 -
C++----初始化列表
一、为什么要有初始化列表?有什么作用?class Test{public: Test(int a,int b) { ma = a; mb = b; }private: int ma; int mb;};对于上面的函数,Test类中的构造函数中,是分别用a和b给ma和mb赋值,是一个赋值的过程。但是,在有的情况就下会发生错误,比如...原创 2019-05-16 18:15:41 · 117 阅读 · 0 评论 -
C++----函数的调用约定
一、C/C++函数的调用约定(默认使用__cdecl)1、__cdecl C标准调用约定2、__stdcall Windows标准调用约定3、__fastcall 快速调用约定4、__thiscall 类成员方法的调用约定约定了:1、符号生成规则 列如 int sum(int,int)(1) ?sum@@YAHHH@Z(2) ?sum@@...原创 2019-05-14 18:33:23 · 174 阅读 · 0 评论 -
C++----函数堆栈调用
一、函数堆栈调用以以下简单的代码为例,分析函数调用的过程#include<stdio.h>int sum(int a,int b){ int tmp = a+b; return tmp;}int main(){ int a = 10; int b = 20; int rt = 0; rt = sum(a,b); printf("%d\n",rt); ...原创 2019-05-14 17:49:09 · 314 阅读 · 0 评论 -
C++----智能指针
因为C++中没有自主的内存回收机制,new出来的内存一定要使用dalete释放,否则就会造成内存泄露,因此有了智能指针,智能指针的原理就是收到开辟,系统释放智能指针共分为4种,即boost库中的auto_ptr、scoped_ptr、shared_ptr、weak_ptr。一、c++11 auto_ptr-----所有权唯一,即就是只能有一个智能指针指向该内存块,如果有新的智能指针指向此内存...原创 2019-04-22 19:44:30 · 181 阅读 · 0 评论 -
TCP高性能服务器编程----多进程与多线程
首先回忆一下在tcp编程中,主要看一下服务器端的代码#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <...原创 2019-04-14 23:43:35 · 292 阅读 · 0 评论 -
C和C++的区别
区别从以下几个方面来分析1.函数的默认值(1)自右向左依次赋予(2)不能重复赋值(3)一般赋在声明上2.函数重载函数重载的三要素(1)同名(2)参数不同(3)同作用域3.inline函数 编译阶段(1)调用点直接代码展开(2)inline函数和普通函数的区别普通函数有 开栈 清栈的开销inline函数 没有开栈和清栈的开销inline是以代码膨胀为代价 ...原创 2019-04-07 20:57:13 · 96 阅读 · 0 评论 -
c++类中4个默认的函数
自己没有写这些函数时,系统会自己提供一个,如果自己写,就不会提供一、构造函数1、作用:初始化对象的内存空间2、特点:(1)可以重载重载的三要素:同名、不同参、同作用域(2)不能手动调用原因:对象的生成有两步,一是开辟内存,二是调用构造函数对内存进行初始化。如果手动调用对象将无法生成。二、析构函数1、作用:释放对象所占的其他资源2、特点(1)不可重载(2)可以手动调用(手动...原创 2019-04-07 20:33:18 · 1052 阅读 · 0 评论 -
浅拷贝、深拷贝、写时拷贝
一、浅拷贝缺点:当一个对象销毁时,内存块会被释放,其他指向的对象销毁时会由于释放一个悬空指针而出错。二、深拷贝缺点:如果只是访问数据,则浪费内存三、写时拷贝在开始的时候都是使用浅拷贝,当要修改该内存块的数据时,再实现针对该内存块的深拷贝具体做法:在开辟内存块时多开辟4字节,存放引用计数,记录指向该内存块的指针的数量,若有对象要销毁时,将指向内存块的引用计数-1,如果等于0 则销毁...原创 2019-08-01 09:27:59 · 227 阅读 · 0 评论