![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++进阶
onj123
这个作者很懒,什么都没留下…
展开
-
C++进阶:结构体
初始化结构体当定义结构体变量时,可以通过两种方式初始化它:使用初始化列表或。1. 初始化列表struct Date { int day, month, year; }; Date day = {2020, 1, 1};2. 构造函数struct Date { int day, month, year; Date(int _day=1, int _mont...原创 2020-04-24 18:49:13 · 203 阅读 · 0 评论 -
c++进阶:匿名函数
Lambda表达式具体形式如下:capture->return-type{body}获取外部变量->返回值{ 函数体 }[](int x, int y) -> int { int z = x + y; return z; }无返回值时简写为:获取外部遍量{ 函数体 }[](int x, int y) { int z = x + y; }无参数时简写为:[获取外部遍量]...原创 2020-04-24 18:48:02 · 709 阅读 · 0 评论 -
c++进阶:友元函数/友元类
友元函数1. 不是本类内成员函数(将全局函数或其它类的成员函数声明为本类的友元函数)2. 在本类内friend声明(它是我朋友,可以用我的东西),在类外定义3. 可以调用本类内的所有属性和方法class A { private: int p; public: friend void fun(A &a);} void fun...原创 2020-02-25 13:08:26 · 115 阅读 · 0 评论 -
c++进阶:模板函数/模板类/特化
模板1. 模板增加了编译时长,避免了运行时的识别2. 模板在编译时进行替换,不是在预编译时进行,也不是简单的宏替换3. 模板可嵌套,通过递归展开4. 定义需要template,声明时不用5. class表示数据类型,不是类6. typename和class效果一样模板函数1. 使用时传入参数类型,T占位符template <typename T> // 或者 ...原创 2020-02-25 13:07:20 · 248 阅读 · 0 评论 -
c++进阶:常引用/常指针/常成员变量/常成员函数
constint a = 1;常引用:const int &p = a;常指针:const int *p = &a;常引用和常指针的变量是只读的常成员变量:const修饰成员变量1. 需要初始化列表初始化(初始化列表比构造函数先执行,初始化列表只能用于构造函数)常成员函数:const修饰成员函数1. 在常成员函数中不能修改成员变量的值2. void fun() ...原创 2020-02-25 13:04:47 · 275 阅读 · 0 评论 -
c++进阶:拷贝构造函数/赋值构造函数/move构造函数
拷贝构造函数1. 用同类型对象初始化新对象2. 默认构造函数:编译器自动创建拷贝构造函数(浅拷贝)3. 对指针成员变量需要深拷贝(复制指针变量,并复制指针指向的内存)4. 调用拷贝构造函数 a. 定义时初始化:A aa=a; 或 A aa(a); b. return 返回一个对象class A { public: int *p; A(cons...原创 2020-02-25 13:03:06 · 499 阅读 · 0 评论 -
c++进阶:虚继承/虚函数/虚析构函数/纯虚函数/虚函数表
虚继承:父类继承顶层父类时使用,解决菱形继承问题虚函数:父类的方法添加virtual修饰,解决父类指针指向子类对象是,调用子类的方法虚析构函数:父类的析构函数添加virtual修饰,解决父类指针指向子类对象时,销毁对象时没有调用子类的析构函数的问题纯虚函数:父类的方法添加virtual修饰,只有函数名,没有函数体虚函数表:类中的第一个成员就是虚函数表指针,指向了虚函数表。纯虚函数在表中是0...原创 2019-12-31 23:14:07 · 238 阅读 · 0 评论 -
c++进阶:多态
静态多态(早绑定)即重载,在编译时确定使用哪个方法动态多态(晚绑定)即一个接口,多种状态。有父类方法覆盖、父类指针指向子类对象方式,在运行才决定执行哪一个方法。父类方法覆盖父类的某一方法为虚函数或纯虚函数,子类实现具体功能。父类指向子类对象1. 父类指针可以指向子类对象,或者子类对象可以赋值给父类,但是不能反过来2. 此时,父类指针只能调用父类的属性和方法3. 即使是同名的属性和...原创 2019-12-31 23:12:59 · 139 阅读 · 0 评论 -
c++进阶:继承
继承1. 默认private2. 子类继承父类的属性和方法3. 如果子类重写与父类同名的属性和方法,父类的同名属性和方法会隐藏4. 子类仍然可以显示的调用父类的同名属性和方法5. 可以多继承继承方式1. 共有继承 public a. 父类的所有东西都继承 b. public继承为public,protected继承为protected c. privated继承到不可见位置,...原创 2019-12-31 23:11:30 · 141 阅读 · 0 评论 -
c++进阶:封装
封装性使用private/protected/public访问限定符限制类的属性和方法静态成员1. 属于类,在没实例化之前就已经存在,必须在类外初始化2. 所有对象共用静态方法1. 属于类,在没实例化之前就已经存在2. 所有对象共用3. 不能调用类内普通的属性和成员注意:1. 在继承时,子类会继承父类的静态属性和方法,父类和子类操作的是同一个2. 如果子类定义了同名的静态...原创 2019-12-31 23:02:56 · 100 阅读 · 0 评论 -
c++进阶:构造与析构
构造函数1. 如果没有写构造函数,编译器自动创建无参的构造函数2. 如果写了构造函数,则不会自动创建无参构造函数3. 同理,如果没有写拷贝构造函数,编译器自动创建拷贝构造函数4. 初始化列表比构造函数先执行5. 如果类中有其它类作为成员,则类成员先构造6. 在实例化子类时,先执行父类的构造函数,再执行子类的构造函数析构函数1. 只能是public修饰,否则报错2. 销毁时自动调...原创 2019-11-30 23:12:45 · 87 阅读 · 0 评论 -
c++进阶:函数特性
函数默认参数1. 有默认值的参数放在没有默认值的参数的右边2. 无参数传入时使用默认参数,否则传入的参数覆盖默认值函数重载1. 同一函数名,参数个数或类型不同2. 编译时根据传入的参数或类型识别内联函数1. 使用inline声明2. 编译时使用实际的函数代码替换掉调用函数的语句,有点类似于#define的效果3. 递归无法使用(递归是调用本身,无法确定具体调用多少次,而且代码...原创 2019-11-30 23:11:50 · 86 阅读 · 0 评论