C++
文章平均质量分 56
柴犬小丸子
To be best you
展开
-
函数默认值、内联函数、函数重载
函数默认值C++在声明函数原型的时候,可以为一个或多个参数指定默认参数值,当函数调用的时候,如果没有指定这个值,编译器会自动用默认值替代。列如: int Sum(int a=1 ,int b =10) { return a+b; } int main { sum(1,2);//正常调用函数 sum(1);/...原创 2018-11-26 16:16:53 · 191 阅读 · 0 评论 -
C++空指针调用成员函数
如果在C++里用空指针调用成员函数会发生什么情况呢?以下面类为例class A{private: int a=100;public: void Show() { cout << "This is A" << endl; } void GetA() { cout << a << endl; } void SetA...原创 2019-08-11 15:41:34 · 303 阅读 · 0 评论 -
重载、重写、隐藏、覆盖
重载:重载是指在同一作用域内,具有相同函数名但是参数列表不同的函数之间构成重载。特征:同一作用域 函数名相同 参数列表不同重写:重写是在父子类之间,也叫做子类隐藏父类。子类拥有和子类相同返回值、函数名、参数列表但是函数实体不同的函数,这样的情况叫做重写。特征:发生在在父子类中 返回值、函数名、参数列表均相同隐藏:子类会隐藏父类中同名的函数。特征:父子类之间 函数...原创 2019-08-20 15:03:44 · 104 阅读 · 0 评论 -
C++实现一个不能被继承的类
使用私有的构造函数,友元函数、虚继承等方式可以使一个类不被继承。为什么必须是虚继承?下面来给大家讲解。首先给出代码#include<iostream>using namespace std;//设计一个不能被继承的类template<typename T>class A{ friend T;private: A() { cout <...原创 2019-08-20 14:54:02 · 363 阅读 · 0 评论 -
智能指针
为什么要设计智能指针?首先给出一个例子void Fun(string & str){ string *ps =new string (str); if(weird_thing()) { throw exception(); } str =*ps; delete ps; return str;}当抛...原创 2019-08-23 16:13:20 · 492 阅读 · 0 评论 -
内存池
一、内存池的概念 内存池是一种内存分配方式。通常我们习惯直接使用new、malloc等接口申请内存,这样做的缺点在于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。 内存池则是在真正使用内存之前,预先申请分配一定数量、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使...原创 2019-08-05 20:39:26 · 118 阅读 · 0 评论 -
Linux下的4G虚拟地址内存分布
开门见山在编译运行过程中,我们需要将我们的程序存储到内存中才能调取运行,但是内存是有限的,不可能将所有的进程都放在内存中去,所以会给进程分配一个4G的虚拟地址空间存储数据,在进程运行时在映射到内存中去。一般情况下Windows下内存分布情况为 用户态:内核态是 1:1而在Linux下内存的分布情况为 用户态:内核态是 3:1下面给出4G虚拟地址内存分布图下面分析从地址到高地址 各段的...原创 2019-07-19 16:44:54 · 1137 阅读 · 5 评论 -
new与malloc的区别
在学习C++的过程中,我们开辟内存的时候通常使用new这一关键字,那么new与C语言中的malloc有什么区别呢?下面我通过各个角度给大家分析一下两者之间的区别。属性new/delete属于关键字,需要编译器的支持,而malloc/free是库函数,需要头文件的支持。参数使用new关键字申请内存分配的时候无需指定内存块的大小,编译器会根据类型自行计算,使用malloc的时候则需要显示的指明...原创 2019-02-24 14:50:27 · 80 阅读 · 0 评论 -
指针和引用的区别
在C++的学习过程中,引入了引用的概念,那么引用和指针有什么区别呢?首先,他们都是地址的概念,指针指向一个内存块,它的内容是内存块的地址,引用是某块内存的别名。指针是一个变量的地址,而引用则是变量的别名。首先我们先定一个指针与一个引用通过反汇编查看,发现其实在底层,引用是通过指针来实现的我们先给指针进行初始化,只声明引用而不初始化,发现编译器报错,提示未初始化引用。之后只声明一下指...原创 2019-02-02 14:21:37 · 121 阅读 · 0 评论 -
C和C++的区别
一、思想上的差异C语言是一门面向过程的语言,面向过程就是解析出问题的解题步骤,将这些步骤一一实现,然后使用时调用即可。其优点是性能比面向对象的语言要高,因为类使用时需要实例化,占用开销较大,比较消耗资源,比如单片机、嵌入式开发、Linux/Uinux等一般采用面向过程开发,性能方面很重要。而C++呢,是一门面向对象的语言,就是将问题抽象成各个对象,建立对象的目的不是为了完成某一个步骤,而是为了...原创 2019-02-02 11:21:02 · 147 阅读 · 0 评论 -
浅谈C++类模板
我们知道在C++中模板可以分为类模板与函数模板,在以前的文章中介绍了函数模板。本文本文以栈类Stack与链表类Clink为例介绍一下类模板。首先模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。目的就是减少代码的重复量,解放C++程序员的生产力。类模板的定义template&lt;class T&gt;class Stack{ ...原创 2018-12-03 19:57:39 · 485 阅读 · 0 评论 -
浅谈C++函数模板
如果给出任意两个数,让他们完成相加求和的操作。我们应该怎么做呢?在C语言的学习过程中,如果我们遇到此类题型,按照所学的C语言的知识,我们会给出以下3种解决方法:泛型、函数重载、宏函数。但这三种解决问题的方法,却存在着极大的缺点。泛型它是个半闭半开区间,容易发生越界问题,而函数重载与宏函数则是处理类型较少。显然这三种方法,不足以解决这种问题的多样性。C+++的函数模板却可以完美的解决此类问题。...原创 2018-11-26 14:22:21 · 172 阅读 · 0 评论 -
const与#define区别和优点总结
一:区别(1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。(2)就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。(3)就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;co...原创 2019-08-25 10:49:14 · 231 阅读 · 0 评论