![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 67
Wu~~~~
这个作者很懒,什么都没留下…
展开
-
C++: C和C++的区别
C和C++的区别C和C++的区别C和C++的区别一、输入与输出二、引用1.引入库2.读入数据三、inline内联函数四、函数默认值五、函数重载六、模板函数七、new和delete八、namespace命名空间一、输入与输出C:#include<stdio.h>int main(){ int a=0; char b='\0'; scanf_s("%d%c",&a,&b); printf("a=%d,b=%c",a,b); return 0;}C+原创 2022-02-19 23:03:15 · 5114 阅读 · 1 评论 -
C++: 总结const与指针和引用的关系
C++ 总结const与指针和引用的关系总结const与指针的关系4种const位置int a=10,int b=20;int *p1=&a; //自由的指针int const *p2=&a;const int *p2=&a; //约束指向的能力,指向为常性int *const p3=&a; //p3自身为常性const int * const p4=&a; //约束自身和指向能力只能进行收缩而不能扩张int a=1原创 2022-01-10 22:46:59 · 578 阅读 · 0 评论 -
C++ 智能指针
智能指针输入问题:给定一个字符串,不知道有几个字符,怎样输入?使用cin.getline(); 输入一行。智能指针概念智能指针主要是针对裸指针进行了一次面向对象的封装,在构造函数中初始化资源地址,在析构函数中释放资源。当资源应该被释放时,指向它的智能指针可以确保自动释放它。RAIIRAII 对堆上空间进行自动化管理——利用对象自动析构的机制。malloc, new 等动态分配的对象,很有可能忘记了去释放资源而导致泄露。对于一个对象而言,在构造函数的时候申请空间,而在析构函数(在离开原创 2021-12-01 20:42:05 · 3716 阅读 · 3 评论 -
泛型算法和函数对象
TOC泛型算法和函数对象泛型算法copy 拷贝//模拟实现拷贝template <typename INSERT_IT, typename IT>void my_copy(const IT &first,const IT &last, INSERT_IT insert_it){ IT tmp = first; for (; tmp != last; tmp++) { *insert_it = *tmp; }}int main(){ vector&原创 2021-11-26 11:48:14 · 74 阅读 · 0 评论 -
STL迭代器
STL迭代器顺序迭代器——遍历型迭代器iterator 正向迭代器reverse_iterator 反向迭代器const_iterator 常量正向迭代器reverse_const_iterator 常量反向迭代器插入型迭代器insert_iterator 随机插入型迭代器 ——依赖insertback_insert_iterator 后插型迭代器 ——push_backfront_insert_iterator 前插型迭代器 ——push_front流原创 2021-11-24 22:34:11 · 177 阅读 · 0 评论 -
STL容器
STLSTL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。算法:各种常用的算法,如sort、find、copy、for_each等迭代器:扮演了容器与算法之间的胶合剂。仿函数:行为类似函数,可作为算法的某种策略。适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。空间配置器:负责空间的配置与管理。STL容器近容器int arr[ ]string str原创 2021-11-19 23:05:40 · 854 阅读 · 0 评论 -
继承和多态3
继承—— 菱形继承定义:两个派生类继承同一个基类,又有某个类同时继承者两个派生类。class A{public: A(int a) { _a = a; } int _a; int funa() { cout << "A::funa()" << endl; }};class B:virtual public A{public: B(int a, int b) :A(a) { _b = b; } int _b; int funab原创 2021-11-17 15:04:38 · 177 阅读 · 0 评论 -
继承和多态2
多态:多态分为静多态和动多态。静多态——在编译时期产生——又被称为早绑定;代表:函数重载 , 模板。动多态——运行时期的多态——有被称为晚绑定;代表:继承中的多态。为什么c语言没有重载,C++有重载?因为c语言隐藏子类中的成员会隐藏父类中同名的成员。覆盖子类中的成员方法会覆盖父类中相同(同返回值,同函数名,同参数列表)的成员函数。动多态的产生条件:指针或引用调用虚函数, +对象必须完整;完整对象:构造函数执行完毕,析构函数还未开始;动多态的过程:使用指针或引用调用虚函数;原创 2021-11-12 11:38:07 · 500 阅读 · 0 评论 -
继承和多态
继承类与类之间的关系:友元组合 成员对象 嵌套——一个类中声明了另一个类一个类是另一个类的一部分;代理——一个类的接口是另一个类接口的子集一个类的功能需要依赖另一个类的功能实现;class Person{public: Person(string name,int age,string sex,string wife=string()) { _name = name; _age = age; _sex = sex; } void eat() { cout <原创 2021-11-10 17:38:06 · 61 阅读 · 0 评论 -
面向对象I
面向对象三大特性:封装 继承 多态四大特性:抽象 封装 继承 多态this 指针指向本对象的指针。编译时期加上:普通成员方法的第一个参数,默认加上this指针;在普通成员方法内使用到普通成员的地方加上this指针的解引用;在调用成员方法的时候加上参数this指针。构造函数(产生时调用)使用构造函数的目的是,给成员属性进行初始化。浅拷贝:指针直接给指针赋值。(一般不使用浅拷贝)深拷贝:重新申请空间,将数值拷贝过来。当对象进行构造的时候默认调用的成员方法;如果没有实现构造函数,原创 2021-11-10 17:42:28 · 60 阅读 · 0 评论 -
模拟实现vector
vector的基本使用容器string ——近容器int arr[10]char str[10]vector ——真正的容器——当作数组来用v.resize(),增加数组容量,新增加的用默认值0填充;减少数组元素时会将元素清除掉。v.reverse(),扩容,不改变数组元素。max_size(), 当前数组元素最多能填充的数据。void show(vector<int>& v){ for (int i = 0; i < v.size(); i+原创 2021-11-30 17:31:18 · 610 阅读 · 0 评论 -
C和C++的区别
函数的默认参数定义:在函数声明或定义的时候,给定参数默认值,如果实参传递时候,不给该形参传值,则会按照默认值传参。函数参数的默认值是在编译期生辰指令时候,直接生成入参指令。函数参数的默认值只能传递常量。函数的默认值参数在同一作用域只能复制一次,不能跳过函数的默认值参数是在编译期代入得,所以函数的参数的默认值只在本文件生效。内联函数在release版本,在调用内联函数时候,该函数会在调用点展开——编译时期展开;在debug版本,内联函数和正常函数调用方式一致。由于内联函数在编译展开,编译器无原创 2021-09-28 17:08:18 · 56 阅读 · 0 评论 -
函数调用过程
函数调用过程参数入栈函数栈帧开辟返回值返回函数栈退出寄存器:cpu 中的变量esp:栈顶寄存器ebp:栈顶寄存器原创 2021-11-08 22:53:57 · 200 阅读 · 0 评论 -
编译链接原理
编译的过程可以分解为四个步骤,分别是预编译、编译、汇编、链接和运行。预编译是将源代码文件如拓展名为.c、.cpp或.cxx预编译成一个.i或.ii的文件。预编译过程主要处理那些源代码中的“#”开始的预编译指令。比如“#include”、“#define”等,主要的处理规则如下:(1)删除#define并进行文本替换(2)处理#if、#endif、#elif(3)递归展开#include(4)删除注释(5)添加行号和文件标识(6)保留#program经过预编译后的.i文件不包含任何宏定义,因为原创 2021-11-10 17:51:58 · 128 阅读 · 0 评论