C++
like_that
freedom
展开
-
【C++】类和对象(类中的六个默认函数以及浅拷贝与深拷贝的概念)
目录C++的四大基本特征:(面向对象的思想oop)栈上的特点:系统开辟、系统释放堆上的特点:手动开辟、手动释放类中的六个默认函数1、构造函数2、析构函数3、拷贝构造函数4、赋值运算符的重载函数临时对象生存周期:C++的四大基本特征:(面向对象的思想oop)1、抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。2、封装:使类具有独立性和...原创 2019-04-06 13:42:58 · 527 阅读 · 0 评论 -
【C++】static的用法
一、地址空间布局内存分布情况:1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区,会随着作用域退出而释放空间。3.堆区:程序员分配并释放的区域,像malloc(c),new(c++)3.全局数据区(静态区):分为.data段和.bss段。程序运行结束时自动释放 data段:存放初始化的静态变量和全局变量。 bss段:存放未初始化的静态变量和...原创 2019-07-16 22:09:48 · 154 阅读 · 0 评论 -
【C++】编译、链接运行原理及内存布局
一、虚拟地址空间布局1、.text段(代码段) 用于存放程序执行代码,可共享,频繁执行的程序在内存中拷贝一份就可以。代码段属于只读,防止其他操作意外的修改对代码段的操作。 代码段指令根据程序设计流程依次执行,对于顺序指令,只会执行一次(每个进程);若有反复,则需使用跳转指令;若进行递归,则需要借助栈来实现。2、数据段(分为.data段和.bss段)...原创 2019-07-21 23:32:46 · 337 阅读 · 0 评论 -
【C++】关于STL中list、deque、vector的插入删除的时间复杂度的比较
一、vector 是动态数组,在堆中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放;如果新值大于当前大小时才会重新分配内存。扩容方式: 1、倍数开辟二倍的内存 2、旧的数据开辟到新内存 3、释放旧的内存 4、指向新内存时间...原创 2019-08-04 12:30:34 · 31046 阅读 · 2 评论 -
【C++】复习2(C/C++的区别、动态内存(new、malloc的区别))
一、C/C++的区别1、C是面向过程的语言 C++是面向对象的语言2、输入输出方式不同3、C++带有默认的函数、函数重载、inline内联函数,这些C++都不支持4、C++可以实现面向对象的代码,具有强大的设计模式,如单例模式、工厂模式、观察值模式,可以更好的进行模块化设计:做到高内聚、低耦合5、强制类型转换不同 在C语言中:使用()小括号里面加类型进行类型强转 ...原创 2019-07-26 17:02:04 · 249 阅读 · 0 评论 -
【C++】复习1(函数符号生成规则、内联函数、C/C++相互调用、const 、引用)
目录一、函数的默认值二、函数符号生成规则三、函数重载四、内联函数五、C/C++的相互调用六、引用七、const一、函数的默认值 1、自右向左依次赋值(原因:与匹配 顺序有关,参数匹配是从左向右); 2、不能重复赋值; 3、一般给在声明上。二、函数符号生成规则 1、C函数符号生成规则:...原创 2019-07-22 21:18:30 · 499 阅读 · 0 评论 -
【C++】复习3(继承和多态)
目录一、继承二、多态 一、继承1、继承的本质 代码复用2、继承和派生派生:从一个或多个以前定义的类(基类)产生新类的过程称为派生,这个新类称为派生类。派生的新类同时可以增加或者重新定义数据和操作,这就产生了类的层次性。继承:继承是面向对象语言的一个重要机制,通过继承可以在一个一般类的基础上建立新类,被继承的类称为基类,在基类上建立的新...原创 2019-08-02 12:54:12 · 207 阅读 · 2 评论 -
【C++】浅拷贝和深拷贝的区别
浅拷贝:(也可以叫做影子拷贝或指针拷贝)只是对指针的拷贝,拷贝后两个指针指向同一个内存空间。(知识进行简单的赋值)(成员变量中有指针考虑实现深拷贝)浅拷贝就是拷贝指向原来对象的指针,是对象的引用计数+1,可以理解为创建了一个新的指向原来对象的指针而已,并没有开辟新的内存空间.这就例如用一间房间的钥匙A配了一枚新的钥匙B,两枚钥匙能且仅能开这间房子的钥匙.深拷贝: 不但对指针进行拷...原创 2019-08-23 21:30:39 · 726 阅读 · 0 评论 -
【C++】指针和引用的区别、数组和指针的区别
目录一、指针和引用的区别二、数组和指针的区别一、指针和引用的区别本质引用是别名(主要用于函数参数和返回值类型,符号X&表示X类型的引用,不是独立的);指针是地址(存放变量地址的一个变量,是独立的,可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。)指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数...原创 2019-08-20 18:57:45 · 444 阅读 · 0 评论 -
【C++】const的用法
1、用const将变量的类型定义成常量;const double PI=3.14;//常量、常指针、常函数const char s[]="hello";//常数组const int bufsize = 512;//常量2、必须在定义时初始化;例:#include <iostream>using namespace std;int main(){...原创 2019-06-22 16:27:20 · 230 阅读 · 1 评论 -
【C++】智能指针的定义与实现
一、什么是智能指针? 智能指针是存储指向动态分配(堆)对象指针的类。除了能够在适当的时间自动删除指向的对象外,他们的工作机制很像C++的内置指针。智能指针在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象。他们也可以用于跟踪被多用户共享的动态分配对象。二、智能指针的原理 智能指针(smart pointer)的通用实现技术是使用引用计数(re...原创 2019-05-07 15:19:11 · 1519 阅读 · 0 评论 -
【C++】类和对象(生存周期及初始化列表、常对象常方法成员对象const、static等的用法)
目录生存周期:初始化列表:总结:生存周期:1. 对于全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。2. 对于局部对象,当对象诞生时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其析构函数被执行。3. 对于静态(static)对象,当对象诞生时其构造函数被执行;当程序将结束时其析构函数才被执行,但比全局对象的...原创 2019-04-06 15:57:21 · 319 阅读 · 0 评论 -
【C++】类和对象(类生成对象的个数及类类型的返回值)
类的扫描 1.扫描类名 2.扫描类成员 3.返回值 形参 默认值 4.函数体统计类生成的对象的个数静态成员的概念: 静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员先于类的声明而存在于内存,也可以根据类声明的对象来访问.而非静态成员必须实例化之后才会分...原创 2019-04-06 16:54:33 · 1017 阅读 · 0 评论 -
【C++】C++泛型编程 函数模板与类模板
模板定义: 模板就是实现代码重用机制的一种工具, 它可以实现类型参数化, 即把类型定义为参数, 从而实现了真正的代码可重用性。作用: 模板用于表达逻辑结构相同, 但具体数据元素类型不同的数据对象的通用行为。一、函数模板1、函数模板:建立一个通用函数,其返回值类型和形参类型不具体指定,用一个虚拟的类型来代替。(编译器并不是将函数模板处理成能够处...原创 2019-04-07 17:04:22 · 354 阅读 · 0 评论 -
【C++】继承和多态——虚函数和纯虚函数
一、虚函数虚函数定义: 就是在基类声明函数是虚拟的,并不是真实存在的函数,在派生类中才正式定义此函数。 拥有Virtual 关键字的函数称之为虚函数,虚函数的作用是实现动态绑定的,也就是说程序在运行的时候动态的的选择合适的成员函数。要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个...原创 2019-05-01 20:44:03 · 602 阅读 · 0 评论 -
C++里的四种类型的转换
1、const_cast 去除常性 const int* ==》int * double int *==》int*2、static_cast (安全性更高)3、reinterpret_cast (类似C的转换)主要用于指针转换4、dynamic_cast(用于RTTI)RTTI:运行时类型信息(run_time type informatio...原创 2019-05-01 20:43:30 · 360 阅读 · 0 评论 -
C++类虚函数的内存布局的练习(虚基类指针的偏移)
1、非虚基类的排列 > 虚基类的排列2、非平行层次下的vbptr合并3、平行层次下在同一作用域也合并虚继承:解决内存重复练习1、练习2、class D: public B,public C virtual public E练习3、class D: public B,virtual public C public E练习4、练习5、...原创 2019-05-02 16:50:52 · 532 阅读 · 0 评论 -
【C++】STL基本容器的简单介绍------(10个)
容器是什么在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,这种“对象”还包含了一系列处理“其它对象”的方法。“容器类是一种对特定代码重用问题的良好的解决方案”。容器的分类容器分为三大类一、顺序容器 是一种各元素之间有顺序关系的线性表,是一种线性结...原创 2019-04-30 15:44:02 · 425 阅读 · 0 评论 -
【C++】inline函数与普通函数、宏、static修饰的函数的区别
inline函数(内联函数)把代码在函数的调用点直接展开。定义:将规模小,而使用频繁的函数声明为内联函数。(在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程传出去)注意事项:①写在头文件下;②只在release版本生效;③建议:循环、递归、switch一定不会出现inline;④加在声明点一定无效,因为inline是基于实现的,不是基于声明的。#inc...原创 2019-05-08 21:26:58 · 721 阅读 · 0 评论 -
【C++】继承和多态
一、继承继承是使代码复用的一种机制。(本质)单继承:一个派生类一个基类派生。多继承:一个派生类有两个人或者多个基类。(如:马与驴杂交所生的骡子就有两个基类,骡子既继承了马的一些特征,也继承了驴的一些特征)派生类构造派生类包括:1、从基类接收成员;(派生类接收基类的全部成员,没有选择)2、调整从基类接收的成员;(可以改变基类成员在派生类中的访问属性(通过继承的...原创 2019-05-01 16:37:51 · 971 阅读 · 1 评论 -
【题】大数乘法
基本原理:将两个数字转换成字符,放到字符数组中。为了防止溢出。思路: 在计算十进制数 123 * 45 时,首先计算 123 * 5 = 615,然后计算 123 * 4 = 492,最终结果是 615 + 492 * 10 = 5535。 大数乘法的计算过程与此相同:对于A(a0a1a2...an-1) * B(b0b1b2...bm-1),并假设N≥M(被乘数位数不...原创 2019-08-21 20:28:22 · 289 阅读 · 0 评论