- 面向对象问题:
- 面向对象三大特征:封装、继承、多态;
- 面向对象五大原则:单一职责、开放封闭、里式替换、依赖倒置、接口分离;
- 类默认是私有成员,结构体默认是公有成员;
- 创建类会默认提供一个无参构造函数、一个拷贝构造函数、一个析构函数;
- 内存问题:
- 四大区域:代码区、全局区、栈区、堆区;
- 全局区有全局变量、静态变量、常量等;
- 栈区有函数的参数值和局部变量;
- 堆区是程序员自己开辟的区域;
- 类的成员函数不是在类里面开辟内存;
- 空类的内存大小是1个字节;
- 深拷贝可以通过重新在堆区开辟内存来避免浅拷贝引起的内存重复释放;
- 指针问题:
- 常量指针不能修改被指向地址中的内容,指针常量不能修改指向的地址;
- this指针本身是一个指针常量;
- 指针传递和引用传递可以达到同样的效果;
- 智能指针可以自动管理堆内存,防止内存泄漏;
- 重载问题:
- 构造函数可以重载,析构函数不能重载;
- 函数返回类型不能重载;
- 运算符重载多结合this指针,且需要尽量与原有的运算符有一致的功能;
- 继承问题:
- 子类不能直接继承父类的私有成员;
- 子类不能继承父类的构造、拷贝构造、析构函数;
- 子类要继承父类的私有,可以通过友元;
- 多态问题:
- 多态分为静态多态和动态多态;???????
- 静态多态在编译阶段确定,动态多态在运行阶段确定;
- 动态多态由继承和虚函数共同实现;
- 构造函数不可以是虚函数,析构函数可以是虚函数;
- 纯虚函数所在的类是抽象类,不可实例化对象;
- 子类必须实现父类的纯虚函数,否则子类也是抽象类;
|