随笔分类 - C++
摘要:这里用一个简单的宏来演示: #define SAFE_DELETE(p) do{ delete p; p = NULL} while(0) 假设这里去掉do...while(0), #define SAFE_DELETE(p) delete p; p = NULL; 那么以下代码: if(NULL
阅读全文
摘要:#a会创建一个字符串:"a";a##b会创建一个新的token:ab。 #include <stdio.h> #define f(a,b) a##b #define g(a) #a #define h(a) g(a) int main() { printf("%s\n",h(f(1,2))); pr
阅读全文
摘要:1.构造函数的作用 在创建对象时,编译器会自动调用构造函数,初始化成员变量。 2.定义 构造函数名是类名; 不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许; 函数体中不能有 return 语句。 #include <iostream> using namespace
阅读全文
摘要:一、类 类(class)是面向对象程序设计的最基本的概念,是C++最强有力的特征,是进行封装和数据隐藏的工具,它将一个数据结构与一个操作集紧密地结合起来。类对象是类的实例,用类对象模拟现实世界中的事物比用数据对象更确切。 1.类与结构体 结构体是C的一种自定义的数据类型,它把相关联的数据元素组成一个
阅读全文
摘要:一、函数重载 函数重载是一种特殊情况,C++允许在同一作用域中声明几个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同。 注意:c语言不允许函数重载 下面同名set,但是不同的形参列表,执行不同的任务。 #include "iostream" using namespace s
阅读全文
摘要:入门级 1.基本数据类型 可参考链接:https://www.cnblogs.com/AntonioSu/p/12273701.html 2.字符串类型 可参考链接:https://www.cnblogs.com/AntonioSu/p/11957499.html 3.容器 常用容器:https:/
阅读全文
摘要:如下只针对于64位机器 整形类 1. int 占4个字节 用来定义-2^31~2^31-1范围内的数 2. long 占4个字节 用来定义-2^31 ~ 2^31-1范围内的数 3. long long占8个字节 用来定义-2^63 ~ 2^63-1范围内的数 4. short 占2个字节 用来定义
阅读全文
摘要:一、一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack):编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构的栈。 2、堆区(heap):是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,值得注意的是它与数据结构的堆是两回事,分配方
阅读全文
摘要:1 全局变量 全局变量申明之前冠以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 全局变量和静态全局变量相同点: 二者都存储在全局区。 全局变量(小)和静态全局变量(大)的作用域不同: 非静态全局变量的作用域是整个源程序, 当一个源程序由多
阅读全文
摘要:析构函数是在对象消亡时,自动被调用,用来释放对象占用的空间。 有四种方式会调用析构函数: 1.生命周期:对象生命周期结束,会调用析构函数。 2.delete:调用delete,会删除指针类对象。 3.包含关系:对象Dog是对象Person的成员,Person的析构函数被调用时,对象Dog的析构函数也
阅读全文
摘要:什么是封装 隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互。 封装的优点 确保用户代码不会无意间破会封装对象的状态 被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。 实现方法 通过访问控制符实现封装 public protected private (1)public成员可以
阅读全文
摘要:作用 c++很重要的一个特征就是代码重用,而代码重用就是通过继承实现。 概念 子类是父类的一个子集,如下图关系 由图可知,院士是老师的子类,而基类的抽象程度最高,子类更加具体。 访问控制 取两者交集的较小者。 子类和父类的关系 子类就是特殊的父类 子类对象可以直接初始化父类对象 子类可以当做父类使用
阅读全文
摘要:一、什么是多态 多态性就是不同对象收到相同消息,产生不同的行为。可以用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。 二、多态的种类 静态联编支持的多态性称为编译时多态性(静态多态性)。在C++中,编译时多态性是通过函数重载和模板实现的。利用函数重载机制,在调用同名函数时,编译系统会
阅读全文
摘要:一、程序编译过程 程序编译流程: 预处理->编译->汇编->链接 具体的就是: 源代码(source coprede)→预处理器(processor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→链接器(Linker)→可执行程序(executab
阅读全文
摘要:常用命令如下 g++ -g -std=c++11 a.cpp -std 指定c++的版本 -g 在可执行程序中包含标准调试信息 -o FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,缺省文件名是a.out.
阅读全文
摘要:istringstream用法,见如下代码 #include <iostream> #include"sstream" using namespace std; int main() { istringstream is("I am\tlove C++\nand I love C"); string
阅读全文
摘要:一.初始化 string string1; string string2="hello world";string string3("hello world"); string string4(10,'h'); 二.对象的比较 可以用 <、<=、==、!=、>=、> 运算符比较 string 对象。
阅读全文
摘要:1.双端队列常用操作 deq.front():返回双向队列的头部元素。deq.push_front(x):把元素x插入到双向队列的头部。deq.pop_front():弹出双向队列的第一个元素。 deq.back():返回双向队列的尾部元素。deq.push_back(x):把元素x插入到双向队列的
阅读全文
摘要:set 和multiset相同点: 两者插入的元素都是有序的。 set 和multiset不同点同点: multiset允许集合内的元素是重复的 set:不允许集合内元素重复 以下对应是multiset可重复插入元素的例子 #include <iostream> #include <set> usi
阅读全文
摘要:1.基本概念 优先队列: 与队列的用法是一样的,优先队列内部是通过堆排序实现的。 因为push和pop方法会导致元素变化,故而需要重新调整堆,而top是把堆顶元素输出。 priority_queue< type, container, function > type:数据类型; container:
阅读全文