c++
十一是只喵哦
量变影响质变.keep fighting !!
展开
-
C++:const关键字
一、const修饰值const关键字限定一个值不能被修改,产生静态作用。const修饰的数据类型是常类型,C 常变量 编译阶段 常变量是否做左值 其他处理和变量是一样C++ 常量 编译阶段 把用到常量的地方替换成常量初始化的值 #include<iostream>using namespace std;in...原创 2019-07-23 18:52:53 · 125 阅读 · 0 评论 -
c++多态:虚函数(为什么使用虚函数、那些函数能成为虚函数)(一)
1、什么是虚函数?来看看虚函数的官方定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,简单来说,就是被virtual关键字修饰的成员函数。作用:实现多态性(动多态),动多态又称动态绑定或晚绑定。2.那为什么要使用虚函数呢?结论:实现因对象的不同而调用其相应的函数可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时, 基类指针调用...原创 2019-08-26 11:31:28 · 546 阅读 · 0 评论 -
c++:智能指针(c++11版本unique_ptr、shared_ptr、weak_ptr)(二)
从前面的内容可以看出auto_ptr具有比较多的缺陷,使用时容易出错。在C++ 11标准中出现了新的智能指针unique_ptr、 shared_ptr与weak_ptr等一、unique_ptr特点:所有权唯一,禁止拷贝和权限转移缺点:unique_ptr是简单粗暴的防止拷贝,这种比较简单,效率高,但是功能不全面,不支持拷贝和赋值操作。无法共享数据,可自主实现数据共享,但在释放时会导...原创 2019-08-11 21:42:54 · 476 阅读 · 0 评论 -
c++:智能指针(c++98版本auto_ptr)(一)
1.首先思考一下,为什么要使用智能指针?智能指针存在的原因?由于C++语言没有自动内存回收机制,程序员每次new出来的内存都要手动delete。程序员忘记delete,最终导致没有delete,导致堆内存泄露,没有执行delete的情况并不罕见。用智能指针便可以有效缓解这类问题。说到智能指针,这里就要说一下RAll思想。2.RAII思想RAII思想是利用对象的生命...原创 2019-08-10 11:42:57 · 832 阅读 · 2 评论 -
c++:设计模式之单例模式(懒汉模式、饿汉模式)(一)
1、什么是单例模式?单例模式:一个类只能创建一个对象,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。实现单例模式的思路:1.屏蔽构造函数2.提供接口生成唯一对象应用场景:比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式...原创 2019-08-14 10:46:53 · 346 阅读 · 0 评论 -
c++:实现一个简单的定长的内存池
1.什么是内存池?内存池(MemoryPool)是一种内存分配方式。C++中系统没有自动回收管理内存的方式,必须要用new和delete来申请和释放内存。那内存池存在的价值又在哪,为什么要使用内存池呢?2.内存池存在的价值通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。...原创 2019-08-05 20:39:17 · 524 阅读 · 1 评论 -
c++:实现一个不能被继承的类
在c++中,怎么能写出一个不能继承的类呢?结论是友元+虚继承,接下来进行一步一步分析。定义一个不能被继承的类,首先要从构造函数为出发点进行思考。现在假设B是一个不能被继承的类,那么如果存在B的子类C,那么C的构造过程应该会报错,那么如何能够让B能正常构造而C不能正常构造呢?将A的构造函数和析构函数都声明为private的,但是将B作为A的友元类,这样B就可以访问A的构造函数和析构函...原创 2019-07-31 21:48:25 · 257 阅读 · 0 评论 -
c++:函数重载、函数重写和函数重定义三者的比较
函数重载(overload)同名 不同参(形参类型不同、形参个数不同、形参顺序不同) 同作用域 返回值可以不同函数重写(也称为函数覆盖 override)函数重写是指子类重新定义基类的虚函数。函数同名同参; 不在同一个作用域(分别位于派生类与基类); 基类函数必须有 virtual 关键字,不能有 static 。 返回值相同,否则报错; 重写函数的访问修饰符可以不同;...原创 2019-07-22 14:45:00 · 335 阅读 · 0 评论 -
C++: new和malloc区别
malloc/free是 C语言库函数,new/delete是C++的操作符。new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。这里的new是指new的三种形态中的operator new1. malloc 和 free 的函数原型:void * malloc(size_t_size); //malloc 函数原型 /...原创 2019-07-23 17:14:17 · 185 阅读 · 0 评论 -
c++:类的六个默认成员函数
什么是类?类是拥有相同属性和行为的集合类中有六个默认的成员函数分别是:构造函数 析构函数 拷贝构造函数 赋值操作符重载函数 取地址操作符重载函数 const修饰的取地址操作符重载函数接下来对前四个函数进行具体的分析我们先定义一个空类:class A{};在经过编译器处理之后它就不在为空,编译器会自动加入一些默认的成员函数,即使在这些函数中什么也不做。编译器处...原创 2019-07-30 19:50:36 · 293 阅读 · 0 评论 -
C++: 函数重载(c++函数原型、函数重载要素)
1.c++函数原型c++函数原型有3部分构成:返回值、函数名称、形参c语言函数原型只与函数名有关2.函数重载三要素函数重载是c++中多态中静多态实现方法之一。多态:静态多态(函数重载、泛型编程) 动态多态(虚函数)同一接口 不同形态 函数重载三要素: 1.同名 2.不同参(形参类型不...原创 2019-07-21 20:38:08 · 1178 阅读 · 0 评论 -
c++:函数堆栈调用(附加相关面经)
一、什么是栈以及特点?由编译器自动分配和释放,操作方式类似于数据结构中的栈。栈用于维护函数调用的上下文,离开了栈函数调用就没法实现。 “先进后出”在计算机系统中,栈被定义为一个特殊的容器,用户可以将数据压入栈中,也可以将已经压栈的数据出栈;栈总是从高地址指向低地址,所以压栈操作使得栈增大,出栈使得栈减小;栈顶由称esp的寄存器进行定位,栈底由称为ebp的寄存器进行定位,压栈操作使得栈顶的地...原创 2019-07-21 19:47:12 · 306 阅读 · 0 评论 -
C++:程序的编译链接过程
预编译阶段:.i删除所有的“#define”,展开所有宏定义并进行文本替换 处理所有的条件预编译指令,“#if”,“#ifdef”,“endif” 等,处理“#include”预编译指令,将包含的文件插入到该编译指令的位置 删除所有的注释 添加行号和文件名标识(以便于编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行号) 保留所有的#pragma编译器指令编译阶段:.s...原创 2019-07-17 18:32:01 · 142 阅读 · 0 评论 -
c++:内存泄漏的常见情况
内存泄漏:是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。(1) 正确的使用new和delete运算符,需要注意的是new和delete要匹配使用,对于初学者这种情况是最常出现的。一般出错的地方像如下的例子,在指针p的值被另一个函数所使用。char * FunA(){ char *p = new ch...原创 2019-07-24 11:06:38 · 346 阅读 · 0 评论 -
c++:内联函数(使用场景、注意事项、及相关面经)
内联函数:以inline修饰的函数叫做内联函数,编译阶段C++编译器会在调用内联函数的地方直接展开,没有函数压栈的开销。“空间换时间”一、inline一般用于如下情况:一个函数不断地被重复调用(函数体小适宜) 函数只有简单几行,且函数不包括for,while,switch语句。一般来说,小程序没必要定义成inline,但是如果要完成一个工程项目,当一个简单函数被调用多次时,则应该考...原创 2019-07-24 10:21:21 · 2459 阅读 · 0 评论 -
c++:指针和引用的区别(相同点和不同点)
引用 别名一定要初始化 (int &c; //error) 引用 不能引用 不可以取地址的数据(如常量) 引用不能改变 引用只能使用 引用变量 所引用的数据 底层使用指针支持,在所有变量使用的地方系统会自动解引用int a = 10;int& b = a;&b =c// 错误,引用不能改变 int ...原创 2019-07-23 21:22:09 · 439 阅读 · 0 评论 -
c++:设计模式之观察者模式 (二)
观察者模式1.观察者 1)通知 2)注册 事件 ==> 监听者2.监听者 处理事件 观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。观察者模式(Observer Pattern),定义了对象间的一对多的依赖关系,让多个观察者对象同时监...原创 2019-08-16 15:23:16 · 181 阅读 · 0 评论