C++基础知识
- 前言
- 基础
前言
当初为了赶一波互联网热潮自学了java,如今因为需要就从java转向C++开发,于是就有了java到C++入门,每次的学习我都会记录一下C++的学习历程。
基础
- C++对于内存的控制管理比java要有更多要求,因此C++对于变量的创建是需要思考的,变量存在的意义就是方便管理内存,而创建变量就是申请一块合适的内存空间。
- 如何给变量申请合适的内存空间,就需要定义需要的数据类型,C++数据类型所占的内存大小(字节)如下所示,而具体到用有符号数还是无符号数就看具体需求:
数据类型 | 占用内存空间(字节) |
---|---|
整型 | |
short | 2 |
int | 4 |
long | 4 |
long long | 8 |
浮点型 | |
float | 4 |
double | 8 |
字符型 | |
char | 1 |
布尔类型 | |
bool | 1 |
-
常数,用于记录程序中不可改变的数据,C++有两种定义方法:
1、#define 宏定义
2、const 修饰词 -
数据输入输出:
1、cin>>变量 获取键盘输入
2、cout<<数据 输出到控制台 -
C++中的条件和循环语句就和java几乎一样
-
指针见C++灵魂->指针
-
结构体:属于自定义数据类型,可以存储不同的数据类型
语法:struct 结构体名称 {结构体成员列表};
- 内存四区(代码区、全局区、栈区、堆区):不同区域存放不同的数据,有不同的生命周期,便于灵活管理。
程序运行前,编译后:
1、代码区存放CPU执行的机器指令 ,有共享和只读特性。
2、全局区存放全局变量、静态变量、字符串常量和const修饰的全局变量(全局常量)
程序运行之后:
1、栈区(编译器自动分配释放)存放局部变量和const修饰的局部变量(局部常量)
(1)不要返回局部变量的地址
(2)不要返回局部变量的引用
2、堆区(程序员分配释放,否则程序结束后由系统释放)
(1)由new关键字来将数据开辟到堆区新内存
(2)由delete关键字将内存地址释放(释放数据时delete[ ]) - 引用:给变量其别名
例如:数据类型 &别名 = 原名;
-
函数参数传递方法:
1、值传递:每次传递都会复制数据,会耗用内存;形参不会改变实参。
2、地址传递(指针),可以减少占用内存,但会可能会造成原数值的修改,可以在传入时加上const防止修改数据的误操作。
3、引用传递,可以简化指针,和地址传递效果一样,同样可以在传入时加上const防止修改数据的误操作。 -
引用课程里的对于引用的本质讲解
引用的注意事项:1、引用必须初始化;2、引用不可更改
-
C++函数的形参可以默认值【注:当其中一个形参有默认值,则该形参的右侧参数都得有默认值;函数声明和实现中只能写一个】。
-
C++函数的占位参数,就是形参中只有数据类型,也可以设置默认值。
-
C++中struct和class的唯一区别就是struct的访问权限默认是公有的,class则为私有。
-
对象的初始化及清理【即构造函数及构析函数】
1、当类对象被创建时,程序至少会自动创建三个构造函数【无参构造、有参构造及拷贝构造】。
2、类对象作为类成员被创建时,先调用对象成员的构造再调用类成员的构造,构析函数则相反。 -
this指针:this指针指向被调用的成员函数所属的对象
1、解决名称冲突
2、在类的非静态成员函数中返回对象本身,即return *this; -
空指针可以访问成员函数
-
常对象【声明对象前加const修饰符】只能调用常函数【成员函数后加const修饰符,常函数内不能修改成员属性】
-
友元,即使函数或者类能访问另一个类的私有变量
1、全局函数做友元:在该类中声明全局函数,并且在前面加上friend
2、类做友元:在该类中声明要访问的类,并且在前面加上friend
3、成员函数做友元:在该类中声明成员函数,并且在前面加上friend -
继承:
1、先调用父类构造函数再调用子类构造函数,构析函数则相反。
2、子类调用父类中的同名成员(变量、函数),需要加作用域;调用子类本身中的时,正常调用。
3、C++中允许多继承 -
字符数组可以初始化直接赋值,但是不能声明后再直接赋值,但可以用strcpy()函数,如:
char str1[40] = "fjkahfhahkfhah"; //正确
/
char str2[40];
str2[40] = "aihfihncsajkhjk"; //错误
/
char str3[40];
strcpy(str3,"aihfihncsajkhjk"); //正确