当前位置: 首页 > news >正文

【C++】面向对象的三大特性

面向对象编程三大核心特性:封装、继承和多态。

1. 封装

封装指的是将数据操作这些数据的方法绑定在一起,形成一个对象,并且隐藏对象的内部实现细节,只暴露必要的接口。封装的目的是保护数据,确保外部代码不能直接访问对象的内部状态,只有通过对象提供的方法才能与数据交互。

class Person {
private:
    int age; // 仅在类内部访问
public:
    void setAge(int a) { // 通过方法设置数据
        if (a >= 0) age = a;
    }
    int getAge() { // 通过方法获取数据
        return age;
    }
};

2. 继承

继承允许一个类从另一个类中继承属性和方法。通过继承,子类能够复用父类的代码,并且可以对父类的方法进行扩展和修改。

  • 优势

    • 代码复用:子类继承父类后,能够使用父类的已有功能,避免重复编写相同的代码。
    • 可扩展性:子类可以在继承的基础上增加新的功能或修改父类的行为。
class Animal {
public:
    void eat() {
        std::cout << "Eating...\n";
    }
};

class Dog : public Animal {
public:
    void bark() {
        std::cout << "Barking...\n";
    }
};

Dog dog;
dog.eat(); // 从Animal继承的方法
dog.bark(); // Dog类的方法

3.多态

多态是指同一操作作用于不同的对象上,可以表现出不同的行为。多态可以通过方法重载(函数签名不同)和方法重写(子类修改父类方法的实现)来实现。

优势

  • 提高了代码的灵活性和可维护性,程序在运行时可以决定调用哪个版本的函数。
  • 通过多态可以写出更加通用和可扩展的代码,减少了冗余。
class Shape {
public:
    virtual void draw() { // 虚函数,允许子类重写
        std::cout << "Drawing a shape\n";
    }
};

class Circle : public Shape {
public:
    void draw() override { // 重写父类的方法
        std::cout << "Drawing a circle\n";
    }
};

class Square : public Shape {
public:
    void draw() override { // 重写父类的方法
        std::cout << "Drawing a square\n";
    }
};

void drawShape(Shape* shape) {
    shape->draw(); // 根据传入的具体类型调用不同的draw方法
}

int main() {
    Shape* shape1 = new Circle();
    Shape* shape2 = new Square();
    drawShape(shape1); // 输出: Drawing a circle
    drawShape(shape2); // 输出: Drawing a square
    return 0;
}

总结:

  • 封装:通过隐藏实现细节和暴露接口来保护数据,确保对象的内部状态不被随意修改。
  • 继承:子类可以继承父类的属性和方法,复用代码并扩展功能。
  • 多态:同一接口可以根据不同对象表现出不同的行为,提高了代码的灵活性和扩展性。

相关文章:

  • 企业存储系统
  • windows环境下用docker搭建php开发环境dnmp
  • armv7l
  • 蓝桥杯学习大纲
  • 使用jenkins构建Android+Flutter项目依赖自动升级带来兼容性问题及Jenkins构建速度慢问题解决
  • 基于射频开关选择的VNA校准设计
  • vue3 背景虚化,文字高亮效果
  • git输错用户名或者密码
  • 连续学习、增量学习有哪些应用场景?
  • JavaScript系列(77)-- Web Components 深入解析
  • vue3引用vue-ueditor-wrap组件
  • Log4j在Spring项目中的应用与实践
  • 钉钉多维表:数据管理与协作的新篇章
  • 数仓搭建(hive):DWB层(基础数据层)
  • 【核心算法篇九】《DeepSeek联邦学习:医疗数据隐私保护实战》
  • Spring IoC DI
  • 腿足机器人之十- SLAM地图如何用于运动控制
  • Compose 定制UI视图
  • Golang通过 并发计算平方 示例演示并发
  • 【Linux】Linux 文件系统——有关 inode 不足的案例
  • 建设一个农家乐网站/seo优化需要多少钱
  • 泰兴网站建设开发/nba总得分排行榜最新
  • 同行抄袭公司网站/网络代运营推广
  • 上海松江做网站建设/一个新手怎么去运营淘宝店铺
  • 工信部资质查询网站/网络推广公司哪家好
  • 泸州北京网站建设/一站式媒体发布平台