C++ 面向对象 完整详细精讲
·
一、什么是面向对象 OOP
面向对象是一种编程思想,把现实事物抽象成类,用对象来使用。核心思想:万物皆对象。
类:抽象模板(图纸)对象:类的实例(造出来的产品)
二、面向对象三大核心特性
1. 封装
把数据和方法打包在一起,对外隐藏细节,只暴露必要接口
- 成员变量私有化
private - 提供 public 的 get/set 方法访问
- 好处:安全、易维护、代码可控
2. 继承
子类复用父类的属性和方法,避免重复代码
- 三种继承方式:
- public 公有继承
- protected 保护继承
- private 私有继承
- 好处:代码复用、便于扩展、层次清晰
3. 多态
一个接口,多种实现分为两种:
- 静态多态(编译期):函数重载、运算符重载
- 动态多态(运行期):虚函数 + 重写 + 父类指针指向子类对象好处:程序扩展性强,开闭原则
三、类与对象基础
1. 类的组成
- 成员变量:属性
- 成员函数:行为
2. 访问权限修饰符
- private:私有,本类内部可访问,外界不能
- protected:保护,本类 + 子类可访问
- public:公有,任何地方都能访问
3. 对象创建
cpp
运行
Person p; // 栈对象
Person* p = new Person;// 堆对象
四、构造函数与析构函数
构造函数
- 名字和类名相同,无返回值
- 创建对象自动调用分类:
- 无参构造
- 有参构造
- 拷贝构造
- 移动构造
- 委托构造
析构函数
- 名字加
~,无参数无返回 - 对象销毁自动调用
- 作用:释放资源、关闭文件、释放堆内存
- 多态场景必须写虚析构
virtual ~Person()
浅拷贝 & 深拷贝
- 浅拷贝:只拷贝地址,多个对象共用同一块堆内存,容易重复释放
- 深拷贝:重新开辟内存,各自独立,安全
五、this 指针
- 每个成员函数隐含
this指针 - 指向当前调用的对象
- 用途:
- 区分成员变量和局部变量重名
- 返回自身对象
- 在类内访问自身成员
六、静态成员 static
静态成员变量
- 属于类,不属于单个对象
- 所有对象共享同一份
- 内存全局只一份,提前初始化
静态成员函数
- 只能访问静态成员
- 没有 this 指针
- 可以类名::函数名 直接调用
七、继承详解
继承语法
cpp
运行
class 子类 : 继承方式 父类 { };
继承访问变化
- public 继承:父类 public→子类 public,protected→protected
- protected 继承:父类 public/protected 都变成子类 protected
- private 继承:父类 public/protected 都变成子类 private
构造析构顺序
父类构造 → 子类构造子类析构 → 父类析构
菱形继承问题
- 多继承造成二义性
- 存在数据冗余解决:虚继承 virtual
八、多态详解(重点)
实现条件
- 继承关系
- 子类重写父类虚函数
- 父类指针 / 引用 指向子类对象
虚函数
cpp
运行
virtual void show();
纯虚函数 & 抽象类
cpp
运行
virtual void show() = 0;
- 包含纯虚函数的类叫抽象类
- 不能实例化对象,只能被继承
虚函数表 vtable
- 每个含虚函数的类,有一张虚函数表
- 对象内部有 vptr 虚指针,指向虚表
- 运行时通过虚表找到真正调用的子类函数
九、常成员与 const
- 常成员函数:不修改成员变量
cpp
运行
void fun() const;
- 常对象:只能调用常成员函数
- const 成员变量:只能在初始化列表初始化
十、友元
friend友元函数、友元类- 可以突破访问权限,访问类私有成员
- 破坏封装,尽量少用
十一、面向对象设计原则
- 封装:隐藏实现,暴露接口
- 继承:代码复用
- 多态:灵活扩展,一套接口多种实现
极简背诵总结
类是模板,对象是实例;三大特性:封装、继承、多态;构造造对象,析构释资源;虚函数实现动态多态,虚析构防止内存泄漏;static 属于类,this 指向当前对象;继承有三种权限,菱形继承用虚继承解决。
更多推荐


所有评论(0)