022 C++的OOP技术


作者Lou Xiao, deepseek创建时间2025-04-02 16:26:53更新时间2025-04-02 16:26:53

一、OOP核心概念

1.1 四大特性

  • 封装(Encapsulation)
    • 数据隐藏:通过访问修饰符(private/protected/public)控制成员可见性
    • 类与结构的区别:默认访问权限不同(class-private,struct-public)
  • 继承(Inheritance)
    • 代码复用和层次化设计
    • 继承类型:public/protected/private
  • 多态(Polymorphism)
    • 编译时多态:函数重载、运算符重载
    • 运行时多态:虚函数机制
  • 抽象(Abstraction)
    • 接口与实现分离
    • 纯虚函数和抽象类

1.2 类与对象

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 class Circle {
2 private:
3 double radius; // 数据成员封装
4 public:
5 // 构造函数
6 Circle(double r) : radius(r) {}
7
8 // 成员函数
9 double area() const {
10 return 3.14159 * radius * radius;
11 }
12 };

二、类成员详解

2.1 构造函数与析构函数

  • 构造函数重载
  • 初始化列表语法
  • 拷贝构造函数(深拷贝 vs 浅拷贝)
  • 移动构造函数(C++11)
  • 虚析构函数的重要性

2.2 特殊成员

  • const成员函数
  • static成员
  • 友元(friend)
  • 破坏封装性的特殊机制
  • 友元函数/友元类
1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 class Counter {
2 static int count; // 类级别共享
3 public:
4 Counter() { ++count; }
5 static int getCount() { return count; }
6 };

三、继承体系

3.1 继承类型

继承方式基类public成员基类protected成员基类private成员
publicpublicprotected不可访问
protectedprotectedprotected不可访问
privateprivateprivate不可访问

3.2 多重继承

  • 菱形继承问题
  • 虚继承解决方案
1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 class A {};
2 class B : virtual public A {};
3 class C : virtual public A {};
4 class D : public B, public C {};

3.3 覆盖与隐藏

  • 使用override关键字(C++11)
  • 名字隐藏现象及解决方法

四、多态实现

4.1 虚函数机制

  • 虚函数表(vtable)原理
  • 动态绑定实现原理
  • final关键字(C++11)

4.2 抽象类与接口

1.双击鼠标左键复制此行;2.单击复制所有代码。
                                
                                    
1 class Shape {
2 public:
3 virtual double area() const = 0; // 纯虚函数
4 virtual ~Shape() = default;
5 };
6
7 class Square : public Shape {
8 double side;
9 public:
10 double area() const override {
11 return side * side;
12 }
13 };

4.3 RTTI(运行时类型识别)

  • typeid运算符
  • dynamic_cast运算符

五、高级OOP特性

5.1 运算符重载

  • 成员函数重载 vs 友元函数重载
  • 特殊运算符(=, [], ->, ())的重载规则

5.2 对象语义

  • 拷贝语义
  • 移动语义(C++11)
    cpp class Buffer { int* data; public: // 移动构造函数 Buffer(Buffer&& other) noexcept : data(other.data) { other.data = nullptr; } };

5.3 RAII范式

  • 资源获取即初始化
  • 智能指针应用(unique_ptr, shared_ptr)

六、设计模式与OOP

6.1 常用模式实现

  • 工厂模式
  • 单例模式
  • 观察者模式
  • 策略模式

6.2 SOLID原则

  • 单一职责原则
  • 开闭原则
  • 里氏替换原则
  • 接口隔离原则
  • 依赖倒置原则

七、最佳实践与陷阱

7.1 常见问题

  • 对象切片(Object Slicing)
  • 虚函数默认参数问题
  • 异常安全与构造函数

7.2 性能考量

  • 虚函数调用开销
  • 对象内存布局优化
  • 内联函数的使用

八、C++ OOP发展

8.1 现代C++特性

  • 默认/删除函数(=default, =delete)
  • 右值引用与完美转发
  • 类型推导(auto, decltype)

8.2 元编程与OOP

  • 模板与继承的结合
  • CRTP(Curiously Recurring Template Pattern)
文章目录