C++学习
- 1.const,mutable,初始化列表,this指针
- 2.static
- 使用类
- 友元
- 作用
- 友元全局函数
- 友元类
- 友元成员函数
- 运算符重载
- 左移运算符 <<
- 下标运算符
- 赋值运算符
- 括号运算符
- 一元运算符
- 自动类型转换
- 隐式类型转换
- 转换函数
- 继承
- 继承方式
- 构造函数继承
- 名字遮蔽和类作用域
- 名字覆盖
- 类作用域
- 继承的特殊关系
- 多态
- 如何析构派生类
- 纯虚函数和抽象类
- dynamic_cast
- typeid运算符和type_info类
- 泛编程
- 自动推导类型
- 函数模板
- 具体化的函数模板
- 函数模板分文件编写
- 函数模板高级
- 类模板
- 模板类和函数
- 模板类与友元
- 将模板类用作参数
- 编译预处理
- 1.包含头文件
- 2.宏定义
- 3.条件编译
- 编译与链接
- 命名空间
- 作用
- 语法
- 使用命名空间
- 注意事项
- c++风格类型转换
- 迭代器
- 基于范围的for循环
- list链表容器
- 构造函数
- STL算法
- 智能指针
- 异常(不是很重要)
- 断言
- 委托构造
- 继承构造
- lambda函数
- 右值引用
- 移动语义
- 完美转发
- 可变参数模板
- chrono时间库
1.const,mutable,初始化列表,this指针
#include<bits/stdc++.h>
using namespace std;
#define N 200002
#define mod 80112002
class CGirl{
public:
mutable string m_name;//mutable可以突破const限制
int m_age;
//普通构造函数
CGirl(string name,int age){
m_name=name,m_age=age;
}
//初始化列表
// CGirl(string name,int age):m_name("美丽的"+name),m_age(age-1){
// m_name="西瓜";//如果在函数中赋值,会覆盖掉初始化列表的值
// cout<<"调用了构造函数\n";
// }
void show() const{//const表示不能修改
cout<<"姓名:"<<m_name<<",年龄:"<<m_age<<endl;
}
const CGirl& pk(const CGirl& g) const{
if(g.m_age < this->m_age)return g;
return *this;
}
};
int main(){
CGirl g1("冰冰",19),g2("玲玲",15),g3("水水",20),g4("火火",77),g5("木木",28);
const CGirl& g=g1.pk(g2).pk(g3).pk(g4).pk(g5);
g.show();
return 0;
}
2.static
1.静态成员不属于对象
2.静态成员变量&函数:与全局变量&函数性质相似,同时类的对象还可以访问静态成员
3.静态成员函数只能访问静态成员
4.静态成员函数中没有this指针
5.语法
int CGirl::m_age=8;//初始化静态成员变量
6.空指针可以调用没有用到this指针的非静态成员函数
使用类
友元
作用
用于访问私有成员
友元全局函数
友元类
友元不是相互的
友元成员函数
语法有点复杂,就不了解了
运算符重载
语法:返回值 operator 运算符(参数列表)
- 非成员函数
- 成员函数
左移运算符 <<
全局函数实现
用成员函数不大行,不然就要写成 g << cout 了
下标运算符
下标运算符必须以成员函数的形式重载
赋值运算符
括号运算符
一元运算符
++举例
自动类型转换
隐式类型转换
转换函数
继承
继承方式
using 更改访问权限
构造函数继承
名字遮蔽和类作用域
名字覆盖
若基类的成员与派生类的成员重名,则调用的是派生类的成员(记住不是覆盖!!)
类作用域
名字遮蔽的原因:
继承的特殊关系
多态
如何析构派生类
当派生类析构函数执行后,会强制执行基类析构函数
当基类指针a指向派生类时,若delete a,只会调用基类析构函数,存在隐患
所以,我们应该将基类的析构函数设置为virtual,这样当delete a 时,会先调用派生类的析构函数,然后调用基类析构函数
纯虚函数和抽象类
dynamic_cast
typeid运算符和type_info类
泛编程
自动推导类型
auto
函数模板
具体化的函数模板
函数模板分文件编写
函数模板高级
类模板
容器都是用模版类实现的
模板类和函数
模板类与友元
将模板类用作参数
编译预处理
1.包含头文件
2.宏定义
3.条件编译
编译与链接
黄->蓝->粉: 预处理
粉->黑 : 编译
黑->棕 : 链接
命名空间
作用
语法
使用命名空间
1.命名空间::名字
2.using 命名空间::名字
3.using namespace 命名空间
注意事项
c++风格类型转换
暂时对新手没啥用处,就不记录了
迭代器
基于范围的for循环
加只读引用效率更高
list链表容器
构造函数
STL算法
智能指针
…………………………………………
异常(不是很重要)
断言
委托构造
将构造函数简化
继承构造
lambda函数
右值引用
右值引用后就变为了左值
移动语义
完美转发
可变参数模板
支持任意类型,任意个数的参数
chrono时间库