C++学习整理

1.namespace
2.cin cout cerr
3.引用 &
4.
static_cast 强制类型修改
const_cast 去掉某个指针的const属性
reinterpret_cast 对指针的强制类型修改,值的大小会变
dynamic_cast
5.内联函数 inline 如果一个函数很小且调用很频繁,就可以将这个函数变为inline函数了
6.new和delete操作 new[] delete[]
7.异常处理 try catch
--------------------------------------------------------------------------------------------------
1.创建类 class
2.类class中的方法可以在类中进行声明和定义, 也可以在类中声明在外部定义
3.隐藏机制 public protected private
类的内部可以访问所有函数
通过类只能访问public函数
继承这个类的子类可以访问protected和public
只有当前类中的属性和方法可以访问 private
4.类中的方法和对象如何访问? 对象就用. 指针就用->
5.定义class,类中的成员变量和成员函数默认是private
定义struct,结构体中的成员变量和成员函数默认是public
6. 一个函数的返回可以是一个引用, 定义函数时用&表示
如果是返回一个引用,则需要考虑当前的引用会不会因为函数走完而被回收,可以用static标识变量
7.构造函数, 名字必须和类名相同,不写返回值。自动调用
默认创建无参构造函数;如果有了有参构造函数,则不会自动创建无参构造函数
8.参数初始化表的方式 作为构造函数
9.使用默认参数的构造函数 , 默认的构造参数的默认值必须在参数的最后面
10.我们可以不声明构造函数,需要声明其他的带参构造函数;或者将构造函数声明为private
11.无
12.拷贝构造函数
13.析构函数 ~
14.this指针标识当前的类的指针
15. malloc和new的区别:new会申请地址并调用构造函数, malloc只能申请地址
free和delete的区别:delete不光能释放地址,还会调用析构函数,free只能取消申请地址
16.const关键字标识不能被修改
const定义了一个对象,这个对象的其他属性也就不能更改了
如果想更改,就需要将它改为mutable修饰
函数的入参使用const修饰,那么这个入餐就不能修改,他里面的属性也不能被修改
17.static关键字 标识静态,修饰的变量是属于类的
静态成员函数只能访问静态的成员变量,不能访问非静态的成员变量
18.friend 有元函数 有元函数修饰的类,可以访问这个类中的private属性
--------------------------------------------------------------------------------------------------
String
string其实就是一个char的数组,可以用string a = "223";
a[2] 来访问3
字符串连接用+
删除某个用erase
提取某个子字符串用substr
查找用find
比较直接用 >, <, ==
--------------------------------------------------------------------------------------------------
1.继承 class 子类 : public 父类
表明子类公有制继承父类,父类中的属性都不会在子类中发生改变,直接继承下去,但是私有父类属性在子类中不能直接去访问
只能通过其他public方法去访问

2.继承方式:public protected private
public继承: 父类 子类
public public
protected protected
private 不能访问

protected继承: 父类 子类
public protected
protected protected
private 不能访问

private继承: 父类 子类
public private
protected private
private 不能访问

3.使用using 关键字可以将父类中public属性改成其他的属性

4.名字隐藏
子类会把父类中相同名字的函数和字段遮蔽,也会把字段的类型遮蔽
遮蔽的意思不是替换。因为都继承过来了。可以用其他的语句: d1.basic::setx() 来执行
5.间接继承
6.继承机制下的构造函数
如果子类没有新增字段,那么就使用父类的构造函数就可以满足要求
如果子类新增加了字段,那么就需要在子类中新增加构造函数
7.派生类构造函数调用规则
父类没有无参构造函数,子类的构造函数则需要显示的调用父类的构造函数
8.析构函数
子类继承了父类
构造函数的调用顺序:父类的构造函数-》子类的构造函数
析构函数的调用顺序:子类的析构函数-》父类的析构函数
每个类中只能有1个析构函数,所以不需要显示的调用析构函数
9.多继承
c++支持多继承,java不支持多继承。
如果父类和子类的属性名相同,则会发生遮蔽的情况
子类.父类::a()
10.虚基类
virtual
A->B->D
A->c->D
D中有来自B的A,D中也有来自C的A

class B:virtual public A
class C:virtual public A
class D:public B,public C
--------------------------------------------------------------------------------------------------
1.多态的定义
父类指针指向子类
父类,子类都有display()
父类指针 *a = &子类b
a->display() 执行的是父类的display方法

当父类和子类的display都被virtual
上图就是调用了子类的display方法
2.虚函数
父类的函数用户virtual修饰的函数就是虚函数
3.vtable
虚函数的内部实现原理:
使用虚函数的类中会有一个vtable,保存着函数名和函数的地址
当我们调用这个虚函数时,会先去找当前是什么对象,找这个对象的类的vtable,然后执行这个函数
4.虚析构函数
构造函数不能用虚函数,析构函数可以用虚函数
析构函数 必须定义为虚函数,用virtual修饰
5.静态成员函数
只有非静态的成员函数才能是虚函数,
静态的成员函数不能是虚函数
构造函数不能是虚函数
6.重载、覆盖、遮蔽
重载是什么:即函数名相同,但是入参不相同
覆盖是什么:子类继承父类,子类和父类有相同的函数,且该函数是虚函数
遮蔽是什么:第一种情况:子类继承父类,子类和父类有相同的函数,但是该函数不是虚函数
7.抽象基类和纯虚成员函数
纯虚成员函数的定义:
virtual int display() = 0;
纯虚成员函数不能实例化,不能创建对象
抽象基类需要被子类继承,子类需要重新定义所有的纯虚函数。
只有虚函数才能成为纯虚函数
8.dynamic_cast的作用
将某个指针类型转换成另一个指针类型
dynamic_cast<derived *>(new base)
dynamic_cast转换必须是多态类型的转换
父类不能强制转换成子类,但是子类可以强制转换成父类
两个没有继承关系的类是不能强制转换的
我们有两个类型转换的工具:static_cast和dynamic_cast。 static_cast不进行校验,dynamic_cast进行校验
9.typeid
typeid返回的是一个type_info类
--------------------------------------------------------------------------------------------------
list
vertor
deque
set
multiset
map
multimap
stack
queue
priority_queue

vector是可以尾部插入和删除的数组
deque也是可以两端插入和删除的数组
list是双向链表

 

posted @ 2022-04-08 11:09  纯丿乱  阅读(27)  评论(0编辑  收藏  举报