C++笔记(细碎小知识点)1

1.内联:写在类内或外部声明inline(编译器判断是否内联,不是满足上述条件就一定内联),优点更快

2.protected:派生类可以直接调用基类的protected成员

3.class类内默认private,struct内默认public

4.构造函数最优写法,用初始化(只有构造函数有)效率比在函数中写更高(因编译器先进行初始化再执行函数)

5.const T: T固定;T const: *固定

6.确实有把构造函数放在private里的需求,如单例模式:通过将构造函数写在private里来防止该类对象被创建,通过public里的static函数或在声明static对象时来调用

7.const函数const在函数体{}前加,只能修饰成员函数,不改变数据内容的都要设为const函数

8.如非必要(想保证原数据不变且需要改变数据副本,或源数据在生命周期结束后仍会被使用),都传入传出引用# 9.main()方法是固定的:public static void main(String[] args)

9.friend自由取得private成员,这就导致同一个class中的各个示例互为friend

10.类内操作符重载需要默认存在this参数,this由编译器提供

11.可直接向引用参数中传值

12.对于有些可以连续调用的函数(如:a+=b+=c;,cout<<a<<b;)要考虑返回值不要用void

13.浅拷贝:指针指向被拷贝对象 深拷贝:将拷贝对象的内容给拷贝

14.三/五法则:如果一个类有非默认的析构函数,则必须有非默认的拷贝构造函数(移动构造函数)和拷贝赋值运算符(和移动赋值运算符)

15.拷贝赋值运算符重载时要检测是否是自我赋值

16.new是先调用内存再构造函数,delete是先析构再释放内存

17.new数组,要delete[]

18.static成员函数只能处理static数据,但可被非static的class对象调用

19.template与template这两个通用

20.explicit用来修饰单个参数的构造函数,表示该构造函数只能显式调用,禁止隐式转换。

21.对于类包类(类a中有类b成员)构造先b后a,析构先a后b

22.delegation可在cpp中实现类似接口的东西,具体为接口类内封装一个private实现类指针,具体实现功能全借助这个指针指向的实现类来实现。这会导致拷贝多个对象则会指向同一个实现类对象。

23.对于父类,析构函数必须是虚函数

24.纯虚函数:virtual 返回值 function()=0;

25.delegation可实现一份a类数据给多个b类对象使用(a类中包含b类指针数组)

26.私有static成员要先在类外进行全局定义

27.转换函数operator 类型()const,写在类内public中,当对象需要隐式类型转换时编译器自动调用

28.当需要将其他类型隐式转换为a类时,编译器会自动调用符合的a类构造函数(如果有的话)

29.当一条语句同时满足27,28两种情况时,会出现歧义,可以通过在构造函数前加explicit来禁止其隐式调用

30.仿指针类(如智能指针,迭代器)类内必会重载 “*” 和 “->”

31.仿函数类类内必会重载“()”

32.函数模板在使用时不必指明“T”,编译器会进行实参推导,类模板需要

33.模板和重载是编译时多态,虚函数重写是运行时多态

34.模板的参数仍可以是模板,特例化时所用的作为参数的模板的参数数量必须定义时作为参数的模板的参数相对应,如:

template<typename T,template<typename T,typename u>class cl>
class a {};
a<int, vector>;

vector与template<typename T,typename u>class cl对应。而vector<vecor>中的vector不是模板参数,因其已经被特例化

posted @ 2023-09-22 22:59  Bazinga_ovo  阅读(122)  评论(0编辑  收藏  举报