C++笔记
文章平均质量分 72
_MaL
少年二字应与平庸相斥
展开
-
C++ 各种关键字以及概念间的区别
目录指针和引用的区别:堆和栈的区别:new/delete与malloc/free的异同:未完待续....指针和引用的区别:1.指针是一个变量,存储的是地址。引用是一个别名,和原变量是同一个东西;2.指针可以有多级,引用只有一级;3.指针可以为空,引用不能为空且必须在定义时初始化;4.指针在初始化后可以改变指向,引用初始化后不可以改变;5.sizeof指针得到的是本指针的大小,sizeof引用得到的是引用所指向变量的大小;6.当把指针作为形参传递时,实际是把实参拷贝后传递给形参,两者指向地址相同原创 2021-03-11 23:57:45 · 225 阅读 · 0 评论 -
C++ STL容器概念
容器string容器:vector容器:向量deque容器:双端队列list容器:双链表关联容器set、multiset、map、multimap集合set:map:multiset和multimap:关联容器特点:string容器:string其实相当于一个保存字符的序列容器,因此除了有字符串的一些常用操作以外,还有包含了所有的序列容器的操作。字符串的常用操作包括:增加、删除、修改、查找比较、链接、输入、输出等vector容器:向量 是一个封装了动态大小数组的顺序容器,是一个可以存放任意类型原创 2021-03-10 23:24:02 · 200 阅读 · 0 评论 -
C++形参带默认值的函数
#include<iostream>int sum(int a, int b){ return a + b;}int main(){ int a = 10; int b = 20; int ret = sum(a, b); std::cout << "ret:" << ret << std::endl; return 0;}sum函数的定义可以有以下几种:int sum(int a=10,int b=20);sum();.原创 2020-09-17 10:28:09 · 3365 阅读 · 3 评论 -
C++开栈、清栈、调用约定
1.开栈:1.压入实参(给形参做初始化,自右向左入栈);2.压入下一行指令地址(回退后能沿着调用点继续执行);3.(push ebp)压入调用方栈底地址(能回退到调用方栈帧);4.被调用方开辟内存并做cccccccc初始化;2.清栈:1.被调用方预留的栈帧清理;2.pop ebp (栈帧回退到调用方);3.pop pc(代码沿着调用方接着执行);4.清理形参; 形参由...原创 2019-10-31 21:25:16 · 1359 阅读 · 0 评论 -
C++ new和delete
1,malloc和new的区别?2,free与delete的区别?#include<iostream>#include<new>using namespace std;int main() { int* p = (int*)malloc(sizeof(int)); if (p == nullptr) { return -1; } *p = 10; free(p); //try 抛出异常 //{ // //} //catch (cons.原创 2020-09-24 14:41:56 · 101 阅读 · 0 评论 -
C++左值引用和右值引用的初识
引用是一种更安全的指针。1.引用是必须要初始化的,指针可以不初始化2。引用只有一级引用,没有多级引用。指针有一级也有多级。int a = 10; int* p = &a; int& b = a; *p = 10; std::cout<<a << " " << *p << " " << b << std::endl; b = 20; std::cout << a << " "原创 2020-09-19 23:35:57 · 249 阅读 · 1 评论 -
const和一二级指针的结合
const修饰的量常出现的错误:1,常量不可以在作为左值。(直接修改常量的值)2,不能把常量的地址泄露给一个普通的指针或者普通的引用变量。(间接改变常量的值)const和一级指针的结合C++语言规范:const修饰的是离它最近的类型const int *p //*p不可以在被赋值,但是p可以被赋值,p没有被任何修饰,可以任一指向不同的int型内存,但是不能通过指针间接修改指向的内存的值。int const *p//和const int *p完全一样int *const p//const修饰in原创 2020-09-19 23:13:29 · 295 阅读 · 0 评论 -
const在C和C++中的区别
1,怎么理解const?2,const在C和C++中的区别?const修饰的变量不能够在作为左值,也就是说一旦被初始化后,值不可以被修改。在.c文件中,const修饰的量,可以不用初始化,但是如果不初始化,那也就没有机会给被修饰量进行赋值。C语言中const修饰的量不叫常量,而叫做常变量,和普通变量的唯一区别就是不能作为左值。C++中的const必须要初始化,叫做常量。但当初始化值不是一个立即数(常数),而是一个变量,此时常量退化为常变量。在C和C++中const的编译方式不同。在C中,con原创 2020-09-19 20:55:53 · 305 阅读 · 0 评论 -
C++函数重载
函数重载主要以以下几个问题展开:1,C++为什么支持函数重载,C语言不支持?2,函数重载要注意什么?3,C++和C代码之间如何互相调用?#include<iostream>//不同参数类型的比较函数bool Compare(int a, int b){ std::cout << "compare_int "<< std::endl; return a > b;}bool Compare(double a, double b){ std:原创 2020-09-17 23:58:43 · 687 阅读 · 0 评论 -
C++ inline内联函数与普通函数的区别
#include<iostream>int sum(int x, int y){ return x + y;}int main(){ int a = 10; int b = 30; int ret = sum(a,b); std::cout << "ret:" << ret << std::endl; return 0;}int ret = sum(a,b);//这里有标准函数调用过程,参数压栈,函数栈帧开辟以及回退过程/原创 2020-09-17 11:16:46 · 790 阅读 · 0 评论 -
C++多态与虚函数条件
看下边代码:#include<iostream>class Base{public: Base(int a):ma(a){} void Show() { std::cout << "ma:" << ma << std::endl; }protected: int ma;};class Derive :public Bas...原创 2020-02-12 16:49:33 · 390 阅读 · 0 评论 -
C++虚函数
首先先看一段代码:#include<iostream>class Base{public: Base(int a):ma(a){} void Show() { std::cout << "ma:" << ma << std::endl; }protected: int ma;};class Derive :publ...原创 2020-02-10 14:01:01 · 448 阅读 · 0 评论 -
C++虚函数表
看下边 一段代码:#includeclass Base{public:Base(int a):ma(a){}virtual void Show(){std::cout << “ma:” << ma << std::endl;}protected:int ma;};class Derive :public Base{public:D...原创 2020-02-10 13:06:44 · 402 阅读 · 0 评论 -
C++迭代器设计模式
迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容(不用关心对象内部)。迭代器的区间:【) 左闭右开迭代器也可以理解为是一个面向对象的指针;面向对象的指针:以对象的形式存在,做指针的事;迭代器和指针的区别:容器和string有迭代器类型同时拥有返回迭代器的成员。如:...原创 2019-12-06 17:17:30 · 922 阅读 · 0 评论 -
C++赋值运算符函数
题目:给出如下类型为CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void);private: char* m_pData;};面试官关注点:1.是否把返回值...原创 2019-11-13 23:33:34 · 1141 阅读 · 0 评论 -
C++Singleton模式
Singleton模式: (单例模式)整个类只能生成一个对象特点:1.屏蔽生成对象的接口 ;2.类中提供接口 来生成唯一对象 ;(1.不能以类类型的方式返回(2.接口是静态函数...原创 2019-11-12 22:28:52 · 1305 阅读 · 0 评论 -
C++构造函数的初始化列表
C++中如何初始化列表?看一段简单代码:class Test{public: Test(int a) { ma = a; }private: const int ma;};运行结果:可以看见程序运行出错,什么原因呢?原因就是 const 修饰的变量必须初始化那么C++中如何给有const修饰的变量做初始化呢?看下边一段代码:class Test{...原创 2019-11-07 23:57:07 · 948 阅读 · 0 评论 -
C++函数堆栈调用
1.函数实参怎么传给形参?形参有没有开辟内存?如果形参开辟内存,在哪里开辟的?2.函数的返回值怎么返回到调用方函数?3.函数返回后怎么知道从哪条语句开始继续执行?首先看一段简单的代码:首先来看下在调用点的汇编指令rt = sum(a1,b1);0040108D mov eax,dword ptr [ebp-8]00401090 push e...原创 2019-11-01 08:32:32 · 944 阅读 · 0 评论 -
C++虚拟地址空间与编译链接原理
1.虚拟地址空间进程地址空间需要隔离,防止恶意的程序修改其它程序的内存数据,因此计算机中引入虚拟地址空间。虚拟地址空间布局.text(代码段)可执行代码、只读变量、字符串常量.data(数据段)已初始化且初值非0的全局变量和静态变量(全局和局部).bss未初始化或初始值为0的全局变量和静态变量。如果变量都已初始化,则bss段被清零heap(堆)动态...原创 2019-11-01 08:30:07 · 1116 阅读 · 0 评论