- 面向对象问题:
- 面向对象三大特征:封装、继承、多态;
- 面向对象五大原则:单一职责、开放封闭、里式替换、依赖倒置、接口分离;
- 类默认是私有成员,结构体默认是公有成员;
- 创建类会默认提供一个无参构造函数、一个拷贝构造函数、一个析构函数;
- 内存问题:
- 四大区域:代码区、全局区、栈区、堆区;
- 全局区有全局变量、静态变量、常量等;
- 栈区有函数的参数值和局部变量;
- 堆区是程序员自己开辟的区域;
- 类的成员函数不是在类里面开辟内存;
- 空类的内存大小是1个字节;
- 深拷贝可以通过重新在堆区开辟内存来避免浅拷贝引起的内存重复释放;
- 指针问题:
- 常量指针不能修改被指向地址中的内容,指针常量不能修改指向的地址;
- this指针本身是一个指针常量;
- 指针传递和引用传递可以达到同样的效果;
- 智能指针可以自动管理堆内存,防止内存泄漏;
- 重载问题:
- 构造函数可以重载,析构函数不能重载;
- 函数返回类型不能重载;
- 运算符重载多结合this指针,且需要尽量与原有的运算符有一致的功能;
- 继承问题:
- 子类不能直接继承父类的私有成员;
- 子类不能继承父类的构造、拷贝构造、析构函数;
- 子类要继承父类的私有,可以通过友元;
- 多态问题:
- 多态分为静态多态和动态多态;
- 静态多态在编译阶段确定,动态多态在运行阶段确定;
- 动态多态由继承和虚函数共同实现;
- 构造函数不可以是虚函数,析构函数可以是虚函数;
- 纯虚函数所在的类是抽象类,不可实例化对象;
- 子类必须实现父类的纯虚函数,否则子类也是抽象类;
- 模板问题:
- 模板分为函数模板和类模板;
- 泛型编程是基于模板实现的;
- STL基本上都是基于模板实现的;
- 类模板中成员函数是在调用的时候创建的;
- 一般地,类模板采用.hpp,定义和实现均在一个文件夹中;
- STL问题:
- 多采用STL提供的方法,并结合algorithm库,避免重复造轮子;
- 合理使用STL容器,并结合类对象方法高效实现所需功能;
- 容器是基于类实现的,且封装了一整套可供外部使用的类方法;
- vector容器的互换操作可以用于缩减内存;
- vector容器的内存是动态分配的,为了减少动态分配耗时,可以采用预分配;
- 容器的迭代器可以实现跳跃式访问容器中的元素;
- STL容器中一般局部变量在栈上,其开辟的空间分配的内存在堆上;
C++编程细节概念
于 2022-05-03 12:35:55 首次发布