C++
1 面向对象编程
面向对象编程是将对象抽象成类,把类的数据与操作封装在一起而进行的编程。
优点:易维护、提高代码复用率
2 参数传递的方式
- 数据复制:创建形参,复制实参的值,占用不同的存储空间
- 地址传递:传入参数的地址,函数对指针所指向的内容进行操作
- 引用方式:相当于变量的别名,但不能指向空地址,且不可变
3 函数重载
用于不同参数类型获参数数目不同时
4 内联函数
inline:在被调用的每一个地方都插入它的一份拷贝,适用于小函数。
5 静态变量
全局静态变量:作用域在本文件中,程度运行期间一直存在。
局部静态变量:作用域在本语句块中,离开作用域后不被销毁。
静态变量存储在内存数据区,在程序运行过程中不释放,结束后才释放内存。
6 静态函数
只在本文件中可见,不能被其他文件所用。避免函数重名冲突。
7 C++内存管理
C++中内存分为代码段、数据段、BSS段、堆区、文件映射区、栈区。
栈区:函数局部变量的存储空间在栈上;
文件映射区:存储动态连接库和大空间的分配,mmap文件映射;
堆区:调用new/malloc在堆区分配内存;
BSS段:存储未初始化的全局变量和静态变量;
数据段:存储初始化的全局变量和静态变量;
代码段:文本区存储程序的机器码。
8 指针
指针是一种特殊的变量,存放被指向内容的内存地址。
除可以指向常用的变量外,指针也可以指向数组、类、函数等,指针也可以用数组存放。
9 new和malloc的区别
new是C++中的函数,可以为变量分配对应的内存空间;
malloc是C中的函数,它需要指定分配空间的大小,需要借用size of函数,因为它不能通过变量的类型自动判断
10 类的构造函数和析构函数
类的构造函数在生成对象时被调用,用于为对象分配空间,并初始化对象,构造函数也可以重载。
类的析构函数在对象释放前调用,做一些清理工作。
11 类和对象
类相当于数据类型,对象时类的实例化。
12 友元函数
友元函数定义在类的外部,但可以访问类的私有成员,它不是成员函数,但在类中声明。
13 运算符重载
运算符重载可以重新定义运算符。
重载方式:
- 成员函数重载运算符,常用于类与数据运算
- 友元函数重载运算符,常用于类与类的运算
14 继承
公有继承、保护继承、私有继承。
基类的私有成员都不能被派生类访问。
14.1 虚继承
当B、C都继承了A,D又继承了B、C,会出现命名冲突和冗余数据的问题。
利用虚继承,可以解决上述问题,即
class B:virtual public A{};
class C:virtual public A{};
15 多态
多态是指调用成员函数时,会根据调用函数的对象类型来执行不同的函数。
15.1 静态方式
利用函数重载、运算符重载实现多态。
15.2 动态方式
利用虚函数和基类指针来实现多态。
16 虚函数
虚函数是指在基类定义后,可以在派生类定义同名函数实现不同的功能。
利用基类指针,分别指向不同的派生类后调用函数,就可以实现派生类中定义的函数功能。
16.1 纯虚函数
纯虚函数的定义如下:
virtual 函数类型 函数名() = 0;
16.2 抽象类
包含纯虚函数的类成为抽象类,一个类可以有多个纯虚函数。