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

C++中面向对象的三大特性是什么?

封装(Encapsulation)

  • 概念:封装是把数据和操作数据的函数绑定在一起,对数据的访问进行限制。通过将数据成员设为私有(private)或受保护(protected),并提供公共(public)的成员函数来访问和修改这些数据,从而隐藏了对象的内部实现细节。
  • 示例
    class Rectangle {
    private:int length;int width;
    public:int getLength() { return length; }int getWidth() { return width; }void setLength(int l) {if (l > 0) length = l;}void setWidth(int w) {if (w > 0) width = w;}int area() { return length * width; }
    };

    • 在这个Rectangle类中,lengthwidth是私有数据成员,外部代码不能直接访问它们。通过getLengthgetWidthsetLengthsetWidth这些公共成员函数来间接访问和修改数据,这样就实现了对数据的封装,保证了数据的安全性和完整性。
  • 继承(Inheritance)
    • 概念:继承允许创建一个新的类(派生类或子类),它从现有的类(基类或父类)继承属性和行为。这有助于代码的复用和扩展,派生类可以继承基类的成员变量和成员函数,并且可以根据需要添加新的成员变量和成员函数或者重写(override)基类的函数。
    • 示例
      class Shape {
      public:virtual void draw() {std::cout << "Drawing a shape." << std::endl;}
      };
      class Circle : public Shape {
      public:void draw() override {std::cout << "Drawing a circle." << std::endl;}
      };

      • 在这里,Circle类继承自Shape类。Shape类有一个draw函数,Circle类重写了这个draw函数,以提供特定于圆形的绘制行为。继承关系使得Circle类可以继承Shape类的特性,同时又能根据自身特点进行定制。
    • 多态(Polymorphism)
      • 概念:多态是指同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在 C++ 中有两种多态性:编译时多态(函数重载和模板)和运行时多态(虚函数)。运行时多态通过虚函数和指向基类的指针或引用实现,使得程序能够根据对象的实际类型来调用相应的函数。
      • 示例(运行时多态)
        Shape* shapePtr = new Circle();
        shapePtr->draw();
      • 当通过基类指针shapePtr(它实际指向一个Circle对象)调用draw函数时,由于draw函数在Shape类中是虚函数,并且Circle类重写了这个函数,所以会调用Circle类中的draw函数,而不是Shape类中的draw函数。这体现了运行时多态,程序在运行时根据对象的实际类型来决定调用哪个函数。
http://www.lryc.cn/news/518048.html

相关文章:

  • Centos 修改 yum 源为阿里云
  • Qt之Cannot create children for a parent that is in a different thread问题分析
  • 均值滤波从图像复原角度的解释
  • Tableau数据可视化与仪表盘搭建-数据连接
  • VsCode对Arduino的开发配置
  • 2024版idea 插件无法加载
  • VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略
  • Unity3D仿星露谷物语开发19之库存栏丢弃及交互道具
  • Kafka优势剖析-消费者组、并行消费
  • Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台
  • Maven 详细配置:Maven settings 配置文件的详细说明
  • 【文本分类】bert二分类
  • 单例模式-如何保证全局唯一性?
  • 设计模式学习笔记——结构型模式
  • WEB攻防-通用漏洞_文件上传_黑白盒审计流程
  • RabbitMQ基本介绍及简单上手
  • 服务器证书不受信任是什么问题?
  • spring mvc源码学习笔记之十
  • Ubuntu 下载安装 elasticsearch7.17.9
  • Qt笔记:网络编程Tcp
  • C++单例模式跨DLL调用问题梳理
  • oracle闪回版本查询
  • C#用winform窗口程序操作服务+不显示Form窗体,只显示右下角托盘图标+开机时自启动程序【附带项目地址】
  • UOS系统和windows系统wps文档显示差异问题解决
  • JS中函数基础知识之查漏补缺(写给小白的学习笔记)
  • 蓝桥杯训练
  • 前端学习DAY33(外边距的折叠)
  • asp.net core mvc的 ViewBag , ViewData , Module ,TempData
  • Linux驱动学习之第二个驱动程序(LED点亮关闭驱动程序-分层设计思想,使其能适应不同的板子-驱动程序模块为多个源文件怎么写Makefile)
  • 手写@EnableTransactionalManagement