首页 > 编程语言 >C++笔记(细碎小知识点)1

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

时间:2023-09-22 23:13:04浏览次数:51  
标签:知识点 函数 C++ 编译器 static 模板 拷贝 细碎 构造函数

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不是模板参数,因其已经被特例化

标签:知识点,函数,C++,编译器,static,模板,拷贝,细碎,构造函数
From: https://www.cnblogs.com/mzd-ovo/p/17723578.html

相关文章

  • Java笔记(细碎小知识点)1
    1.Dos命令:dir:打出当前目录结构;md:创建文件夹;cd+文件夹地址:跳转到当前目录下的对应文件夹;cd..:跳转到上一目录;rd+文件夹:删除文件夹中东西;del+文件(或“*.文件”类型这样的正则表达式):删除文件或这类文件;cd/:跳转到盘符;javac+文件名.java:编译java文件,生成class文件;java+文件名:运行jaca......
  • Fallible point in C/C++
    Operator[]Theperformanceof[]inCandC++isdifferent.e.g.,whenyouexcuteA[index]IfAisaobject,itwillcalltheoperator[]IfAisapointer,itisequivalenttoA+indexSo,operatoroverloadingisinvalidtopointer.......
  • C++ 的cout.tellp()和cout.seekp()语法介绍
    无论是使用cout输出普通数据,用cout.put()输出指定字符,还是用cout.write()输出指定字符串,数据都会先放到输出流缓冲区,待缓冲区刷新,数据才会输出到指定位置(屏幕或者文件中)。值得一提的是,当数据暂存于输出流缓冲区中时,我们仍可以对其进行修改。ostream类中提供有tellp()和se......
  • C/C++ const关键字 解读
    Thecollocationbetweenconstandoriginalpointerisconfusedtomanypeople.Therearetwousagesofit.Thefirstoneisavariablepointerthatpointsaconstantdata.i.e.constint*p#include<iostream>intmain(){ inta=1,b=2; const......
  • C++ STL 容器简单讲解
    STL简单讲解网上有很多很好的资料可以参考而直接看标准是最准确清晰的vectorstackqueue/priority_queuedequearraymap/multimapset/multisetunordered_mapunordered_set关于指针和迭代器!!!pbds……本文默认认为读者会基本的STL应用。一切STL......
  • C++ | 关键字 explicit
    假如有一个类如下:classpoint{public:intx,y;Point(int_x=0,int_y=0){x=_x,y=_y;}};如果以下面两种方式初始化该类的对象:voiddisplayPoint(constpoint&p){printf("(%d,%d)\n",p.x,p.y);}voidmain(){displayPoint(......
  • c++ chat* 转 wchar*
    wchar_t*charToWchar(constchar*src){size_tsize=strlen(src)+1;wchar_t*dest=newwchar_t[size];size_toutSize;mbstowcs_s(&outSize,dest,size,src,size-1);returndest;} stringwstr2str(constwstring&wstr)......
  • c++ struct
    将数组中元素赋值给struct中元素(类型需一致,否则保持默认值),若数组元素少,struct中未被赋值的保持默认值。若数组元素多,对应位置的元素会赋值给struct。#include<iostream>structMyStruct{shortn1;//默认0shortn2;};intmain(){uint16_tnArray[4]=......
  • 3-Linux文档查看指令,关机重启、相关知识点的拓展与总结
    一、文档的查看指令1、tail指令作用:查看一个文件的末n行语法:#tail-n文件的路径说明:-n可以不写,不写,默认表示10行。案例:新建一个1.txt文档,使用tail指令查看root/1.txt文件的末5行和末10行tail-5/root/1.txttail/root/1.txt2、head指令作用:查看文件的头n行语法:#hea......
  • C++ 智能指针概述
    原始指针要想了解智能指针,就需要首先了解原始指针的痛点,原始指针有几点问题忘记释放内存->产生内存泄漏在尚有指针引用内存的情况下释放内存(使用已经释放掉的对象)->产生引用非法内存的指针同一块内存释放2次智能指针的产生本质上都是为了解决这些问题关于使用new动态分......