秋招基本尘埃落定了,打算总结一下C++学习路线的相关知识,今天是第一篇:C++基础知识总结。
1、面向对象的三大特性:
封装:把客观事物抽象为类,包含自己的属性和方法。
继承:使用现有类的所有功能,在无需重新编写原有类的情况下对类的功能进行拓展。被继承的类成为父类或基类,继承的类成为子类或派生类。
多态:一种形式,多种状态,分为静态多态和动态多态。静态多态指编译时多态,如函数重载、模板;动态多态指运行时多态,特指virtual虚函数机制形成的多态。
2、类的访问权限:private、protected、public
类中可以直接访问自己类的public、protected、private成员,但类对象只能访问自己类的public成员。
3、类的构造函数、析构函数、赋值函数、拷贝构造函数
构造函数:一个类对象创建时自动调用的方法,用来完成初始化得工作。
析构函数:当类对象生命周期结束时,自动销毁对象占有的内存。
拷贝构造函数:参数为类的引用,即用一个类对象复制构造一个新的类对象。
赋值函数:将一个类对象成员的值赋给当前对象。
一个类会自定义默认构造函数、默认拷贝构造函数、默认赋值函数、析构函数。
4、移动构造函数与拷贝构造函数的区别
拷贝构造函数的形参是一个左值引用,而移动构造函数的形参是一个右值引用
拷贝构造函数完成的是整个对象或变量的拷贝,而移动构造函数是生成一个指针指向源对象或变量的地址,接管源对象的内存,相对于大量数据的拷贝节省时间和内存空间。
5、深拷贝与浅拷贝的区别
浅拷贝:
利用类提供的默认拷贝构造函数,将一个对象的成员所在内存的数据复制给另一个对象的成员。
深拷贝:
显式定义类的拷贝构造函数,不仅会将原对象的成员变量复制给新对象,还会在堆中为新对象分配一块新的内存,并将原对象持有的动态内存资源也拷贝过来。
6、空类有哪些函数?空类的大小?
一个空类包括默认构造函数、拷贝构造函数、默认赋值运算符、默认取值运算符、析构函数。
空类也可以实例化,在内存会有独一无二的地址,编译器规定空类的大小为1字节;
仅含有一个虚函数的类的大小为4字节,因为虚表指针占有4个字节地址。
7、C++内存分区
全局区:存储全局变量和静态变量,编译时分配,存在整个程序运行期间。
堆区:程序员手动管理的内存区间,运行时分配,手动开辟、释放内存。
栈区:存储局部变量,运行时分配,系统自动管理内存的开辟和释放。
常量区:存放常量,编译时分配,存在整个程序运行期间。
代码区:存放程序运行的cpu指令,编译时分配,系统自动管理内存的开辟和释放。
8、堆区与栈区的对比
申请方式:栈区内存由系统自动管理,堆区内存由程序员手动管理。
空间大小:栈区的大小一般为1M或2M,不超过10M;堆区的大小是不固定的,受硬件内存的限制。
申请效率:栈是线性存储的,由系统自动分配,速度较快;堆区通过一个链表管理空闲内存,容易造成内存泄漏。
生长方向:栈区是由高到低的,堆区是由低到高的。