Skip to content

C++ 语言特性

  • C 是一种过程化编程语言,主要用于系统编程和嵌入式系统。
  • C++ 是一种面向对象编程语言,支持面向对象编程、泛型编程和过程化编程。
  • C++ 具有类、继承、多态、封装等面向对象特性,而 C 没有这些特性。
  • C++ 提供了函数重载、运算符重载和模板等功能,而 C 没有。

封装、继承、多态的定义

  • 封装
  • 封装通过类来实现,将数据和操作数据的方法绑定在一起,并隐藏实现细节。
  • 使用访问控制符(如 privateprotectedpublic)来控制对类成员的访问。

  • 继承

  • 继承允许一个类从另一个类继承成员变量和方法,实现代码重用和扩展。
  • 支持单继承和多继承(一个类可以继承多个基类)。

  • 多态: 分为

  • 编译时多态(静态多态)
  • 通过函数重载和运算符重载实现。
  • 在编译时确定函数调用。 和
  • 运行时多态(动态多态)
  • 通过基类指针或引用调用派生类的虚函数实现。
  • 在运行时通过虚函数表(vtable)和虚函数指针(vptr)确定函数调用。

解决的问题

1、数据和操作的耦合性强,数据易于被随意修改,缺乏安全性和控制。 2、代码重复,不同类之间缺乏共享机制,难以维护和扩展。 3、代码灵活性不足,不同类型对象的操作方式不统一,难以实现通用接口和灵活调用。

应用

具体来说怎么做呢~

封装的属性/函数实现

类的私有属性,应该通过一个公有方法对外;

多态的实现

多态通过基类的指针或引用指向派生类对象,并通过虚函数机制来实现。在运行时,根据实际对象类型调用相应的重写方法。

Copy code
#include <iostream>
using namespace std;

// 基类
class Shape {
public:
    virtual void draw() {
        cout << "Drawing shape..." << endl;
    }
};

// 派生类
class Circle : public Shape {
public:
    void draw() override {
        cout << "Drawing circle..." << endl;
    }
};

class Square : public Shape {
public:
    void draw() override {
        cout << "Drawing square..." << endl;
    }
};

// 函数接收基类指针,实现多态
void drawShape(Shape* shape) {
    shape->draw();
}

int main() {
    Shape* c = new Circle();
    Shape* s = new Square();
    drawShape(c); // 调用 Circle 的 draw 方法
    drawShape(s); // 调用 Square 的 draw 方法
    delete c;
    delete s;
    return 0;
}

在这个例子中,Shape 类定义了一个虚函数 draw,Circle 和 Square 类重写了这个方法。在 drawShape 函数中,通过基类指针 shape 调用 draw 方法,运行时会根据实际对象类型调用相应的 draw 方法,体现了多态性。