首页 > 编程语言 >详解C++的四大特性(封装,继承,多态,抽象)

详解C++的四大特性(封装,继承,多态,抽象)

时间:2024-08-13 17:26:53浏览次数:8  
标签:封装 函数 double 多态 C++ class radius public

C++的四大特性是面向对象编程(OOP)的核心概念,分别是封装、继承、多态和抽象。这些特性共同构成了C++作为面向对象编程语言的基础。

1. 封装(Encapsulation)

  • 概念: 封装是将数据和操作数据的方法绑定在一起,限制对数据的直接访问。通过将数据隐藏在类内部,只暴露必要的接口(如public成员函数)来保护对象的内部状态。
  • 实现:
    • 在C++中,可以使用访问控制符(privateprotectedpublic)来实现封装。通常,类的数据成员声明为privateprotected,而操作数据的方法则声明为public
  • 优点:
    • 提高了代码的安全性,防止了对象的状态被外部代码随意修改。
    • 通过提供清晰的接口,简化了对象的使用,降低了代码的复杂度。
      class Rectangle {
      private:
          double width;
          double height;
      
      public:
          void setDimensions(double w, double h) {
              width = w;
              height = h;
          }
      
          double getArea() {
              return width * height;
          }
      };
      

2. 继承(Inheritance)

  • 概念: 继承允许一个类(子类或派生类)从另一个类(父类或基类)获取属性和行为。子类可以继承父类的成员(包括数据成员和成员函数),并可以扩展或重写这些成员。
  • 实现:
    • 使用关键字class Derived : public Base来声明继承关系,Derived类将继承Base类的所有公有和受保护成员。
  • 优点:
    • 促进了代码的重用,减少了冗余代码。
    • 通过继承,可以创建更为复杂的类层次结构,从而实现更高级的抽象。
      class Shape {
      public:
          void setColor(std::string c) {
              color = c;
          }
      protected:
          std::string color;
      };
      
      class Circle : public Shape {
      public:
          void setRadius(double r) {
              radius = r;
          }
      
          double getArea() {
              return 3.14 * radius * radius;
          }
      private:
          double radius;
      };
      

3. 多态(Polymorphism)

  • 概念: 多态允许同一个函数或运算符根据不同的输入或环境表现出不同的行为。C++支持两种多态性:编译时多态性(通过函数重载和模板实现)和运行时多态性(通过虚函数实现)。
  • 实现:
    • 运行时多态通过基类中的虚函数来实现,子类可以重写这些虚函数,调用时根据实际的对象类型执行相应的函数版本。
  • 优点:
    • 提高了代码的灵活性和可扩展性。
    • 允许以统一的方式处理不同类型的对象,从而简化了代码设计。
      class Animal {
      public:
          virtual void makeSound() {
              std::cout << "Some generic animal sound" << std::endl;
          }
      };
      
      class Dog : public Animal {
      public:
          void makeSound() override {
              std::cout << "Bark" << std::endl;
          }
      };
      
      class Cat : public Animal {
      public:
          void makeSound() override {
              std::cout << "Meow" << std::endl;
          }
      };
      

4. 抽象(Abstraction)

  • 概念: 抽象是通过屏蔽复杂的实现细节,只暴露必要的接口来简化对象的使用。抽象允许用户通过接口与对象进行交互,而无需关心对象内部的实现细节。
  • 实现:
    • 抽象通常通过抽象类或接口实现。在C++中,含有纯虚函数的类被称为抽象类,不能实例化,只能通过继承并实现其纯虚函数来创建具体的类。
  • 优点:
    • 提供了更高层次的控制,使得程序设计更加模块化和灵活。
    • 通过提供清晰的接口,降低了使用和维护代码的难度。
      class Shape {
      public:
          virtual double getArea() = 0; // 纯虚函数
      };
      
      class Rectangle : public Shape {
      public:
          Rectangle(double w, double h) : width(w), height(h) {}
          double getArea() override {
              return width * height;
          }
      private:
          double width, height;
      };
      
      class Circle : public Shape {
      public:
          Circle(double r) : radius(r) {}
          double getArea() override {
              return 3.14 * radius * radius;
          }
      private:
          double radius;
      };
      

 总结来说,封装保护了数据,继承实现了代码重用,多态提供了灵活性,抽象简化了接口。这四大特性相互协作,使得C++能够构建复杂且易于维护的面向对象系统。

 

 

标签:封装,函数,double,多态,C++,class,radius,public
From: https://blog.csdn.net/qq_44905692/article/details/141167026

相关文章

  • C++面试
    1.讲一讲封装、继承、多态是什么?封装:将具体实现过程和数据封装成一个类,只能通过接口进行访问,降低耦合性,使类成为一个具有内部数据的自我隐藏能力、功能独立的软件模块。意义:保护或防止代码在无意之中被破坏,保护类中的成员,不让类中以外的程序直接访问或者修改,只能通过提供的公共接......
  • C++静态函数
    由于本人C++小白,关于C++的很多基础概念都不太理解,在工作当中遇到了静态函数,在函数的使用和调用外部函数与普通函数还是非常不一样的,故这里向AI请教,简单做个记录。AI的回答内容如下:Yousaid:C++当中静态函数的优势是什么ChatGPTsaid:在C++中,静态函数(static函数)是指通过在函......
  • 【C++ STL分配器】详细介绍
    C++中的分配器(Allocator)是用于抽象和管理内存分配与释放的机制,主要用于标准模板库(STL)容器。分配器的设计允许开发者自定义内存管理策略,从而优化性能、满足特殊需求或实现特定功能(如内存池、共享内存等)。本文将详细介绍C++分配器的概念、作用、自定义分配器的实现以及......
  • /lib64/libstdc++.so.6: version GLIBCXX_3.4.20 not found
    java应用运行出现了2个错误,error1:/lib64/libstdc++.so.6:versionGLIBCXX_3.4.20notfounderror2:/lib64/libstdc++.so.6:versionCXXABI_1.3.8notfound查阅了网上的解决方法,都说要更新libstdc++.so.6,按照教程操作,一直没有成功,最后参考了好几篇文章,综合了大家的方法,成功更新......
  • java基础-封装
    封装(数据的隐藏)私有属性实现方式:get/set封装(Encapsulation)是面向对象编程中的一个核心概念,它指的是将对象的内部状态(即数据)和行为(即方法)隐藏起来,只暴露给外部一些必要的接口,以保护对象的完整性和安全性。通俗理解:想象一个遥控器:按钮:这是你能看到和操作的部分,通过按......
  • c++通讯录管理系统
    1、系统需求(1)添加。添加联系人信息(主要包括姓名、年龄、号码和备注)。(2)遍历。显示出所有联系人的信息。(3)删除。删除指定的联系人信息,通过电话号码筛选。(4)修改。修改指定的联系人信息,通过电话号码查找。(5)查找。查找指定的联系人信息,通过电话号码查找。(6)清空。清空所有联系......
  • 27. Hibernate 自动进行数据封装
    1.前言Hibernate可以构建各种复杂的SQL语句,但其本质都是反射机制结合映射关系完成的。框架也仅是一款程序产品,人为编写的产物。要相信,只要你愿意,你完全可以实现自己的JDBC框架。本节课和大家继续聊聊Hibernate是如何自动封装数据的。2.理想状态程序中的数据通过......
  • 高性能的 C++ Web 开发框架 CPPCMS + WebSocket 模拟实现聊天与文件传输案例。
    1.项目结构2.config.json{"service":{"api":"http","port":8080,"ip":"0.0.0.0"},"http":{"script":"",&q......
  • 基于Python训练完成的机器学习模型如何封装成桌面应用
    有时候需要将训练完成的模型封装成桌面应用,本文描述封装成基于Python的桌面应用程序的方法。模型封装是指将模型及其预处理和后处理步骤打包在一起,形成一个独立的服务单元。确保机器学习模型已经训练完成并且能够在本地环境中正确运行。Python有多种GUI库可供选择,如Tkinter、......
  • C++浅拷贝和深拷贝
    在C++编程中,对象的拷贝是一项常见的操作。深拷贝和浅拷贝是两种常用的拷贝方式,对于理解对象拷贝的内部机制和避免潜在的问题至关重要。本文将深入解析C++中的深拷贝和浅拷贝的概念、原理以及使用场景,帮助读者更好地掌握和运用这两种拷贝方式。浅拷贝(ShallowCopy)是指在拷贝对象时......