迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 中公共继承、私有继承和受保护继承之间的区别

作者:迹忆客 最近更新:2023/08/22 浏览次数:

继承是面向对象编程中的一个基本概念。 它可以帮助您扩展类的功能。 继承允许您重用已在一个类中编写和测试的代码,并在另一个类中使用它,从而节省时间、减少错误并简化程序的设计。

继承可以称为类之间的 is-a 关系。 因此,举例来说,如果我们说一辆汽车是一辆汽车,那么我们就是在说所有汽车都是汽车,所有汽车都是汽车。

在本文中,我们将讨论以下三种类型的继承:

  1. Public 继承
  2. Private 继承
  3. Protected 继承

但是,在讨论继承类型之前,我们将讨论 C++ 中基类和派生类的概念。


C++ 中的基类和派生类

基类和派生类用于创建对象的层次结构。 原始类称为基类,而其他继承的类则被视为派生类。

基类为所有成员提供默认实现,必要时可以由派生类覆盖。

派生类可以访问其基类的所有非私有成员。 因此,为了防止派生类的成员函数访问基类成员,应将这些基类成员在基类中设为私有。


C++ 中的公共继承

公共继承是一种继承类型,其中一个类获取另一个类的功能或属性。 它可以看作是 is-a 关系的实现,其中继承类被认为是继承类的扩展或特化。

当一个类从公共基类派生时,基类的公共成员将成为派生类的公共成员,基类的受保护成员将成为派生类的受保护成员。 基类的私有成员永远无法从派生类轻松访问,但可以通过调用基类的公共和受保护成员来检索它们。

#include <iostream>
using namespace std;
class Demo {
  private:
    int x = 56;
  protected:
    int y = 27;
  public:
    int z = 67;
    int getX() {
      return x;
    }
};
class PublicInheritance : public Demo {
  public:
    int getY() {
      return y;
    }
};
int main() {
  PublicInheritance sam;
  cout << "Private member = " << sam.getX() << endl;
  cout << "Protected member= " << sam.getY() << endl;
  cout << "Public member= " << sam.z << endl;
  return 0;
}

单击此处检查上述代码的工作情况。


C++ 中的受保护继承

受保护的继承是基类受到保护的继承形式。 这意味着派生类将把基类的所有公共成员和受保护成员作为受保护成员。

从受保护的基类派生在特定情况下有其好处。 例如,如果您想创建一组相关的类,但又不想将它们公开,因为它们仅供内部使用,那么这将是一个合适的解决方案。

#include <iostream>
using namespace std;
class Demo {
  private:
    int x = 56;
  protected:
    int y = 27;
  public:
    int z = 67;
    int getX() {
      return x;
    }
};
class ProtectedInheritance : protected Demo {
  public:
    int getY() {
      return y;
    }
    int getZ() {
      return z;
    }
};
int main() {
  ProtectedInheritance sam;

  cout << "Protected member= " << sam.getY() << endl;
  cout << "Public member= " << sam.getZ() << endl;
  return 0;
}

单击此处检查上述代码的工作情况。


C++ 中的私有继承

私有继承是指派生类从私有基类继承。 这意味着任何公共或受保护的基类成员都将成为派生类的私有成员。

当您想要创建仅提供其超类的部分功能的子类时,这可能很有用。

#include <iostream>
using namespace std;
class Demo {
  private:
    int x = 56;
  protected:
    int y = 27;
  public:
    int z = 67;
    int getX() {
      return x;
    }
};
class PrivateInheritance : private Demo {
  public:
    int getY() {
      return y;
    }
    int getZ() {
      return z;
    }
};
int main() {
  PrivateInheritance sam;

  cout << "Protected member= " << sam.getY() << endl;
  cout << "Public member= " << sam.getZ() << endl;
  return 0;
}

上一篇:C++ 调用基类方法

下一篇:C++ 子类继承

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

Arduino 复位

发布时间:2024/03/13 浏览次数:315 分类:C++

可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。

Arduino 的字符转换为整型

发布时间:2024/03/13 浏览次数:181 分类:C++

可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。

Arduino 串口打印多个变量

发布时间:2024/03/13 浏览次数:381 分类:C++

可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便