当前位置: 首页 > 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 circledrawShape(shape2); // 输出: Drawing a squarereturn 0;
}

总结:

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

http://www.lryc.cn/news/540338.html

相关文章:

  • Docker构建时,设定默认进入的工作目录的方法
  • DeepSeek等大模型功能集成到WPS中的详细步骤
  • 教学资料档案管理系统
  • linux core分析---TLS读取异常
  • SpringBoot 排除一些包的注入
  • PHP Composer:高效项目依赖管理工具详解
  • 第四届图像、信号处理与模式识别国际学术会议(ISPP 2025)
  • 【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)
  • python:多重继承、MRO(方法解析顺序)
  • Oracle RAC数据库单节点轮流重启
  • 电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?
  • Vue 3 中如何注册全局自定义组件:一个 SVG 图标的例子
  • SpringBoot+Vue3-学习笔记
  • 银河麒麟系统安装mysql5.7【亲测可行】
  • 为什么WP建站更适合于谷歌SEO优化?
  • ue----git局域网内部署裸仓库,别的机器进行访问
  • leetcode876.链表的中间结点
  • 旧手机热点无法提供ipv6解决方法(emui 8 热点提供ipv6)
  • 解决DeepSeek服务器繁忙问题的实用指南
  • 新数据结构(12)——代理
  • 记一次一波三折的众测SRC经历
  • Laravel从入门到上云
  • 【小游戏】C++控制台版本俄罗斯轮盘赌
  • 【前端】使用WebStorm创建第一个项目
  • 前后端项目部署服务器(传统部署和Docker部署)
  • C++,设计模式,【工厂方法模式】
  • golang--字符串处理(rune类型)
  • 如何通过AI优化敏捷开发中的任务管理与分配?
  • 第1章大型互联网公司的基础架构——1.11 消息中间件技术
  • FlutterAssetsGenerator插件的使用