迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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++ 调用基类方法

下一篇:没有了

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

本文地址:

相关文章

C++ 调用基类方法

发布时间:2023/08/22 浏览次数:118 分类:C++

本文将讨论使用 C++ 从子类调用父类方法。 首先,我们将快速刷新继承。稍后我们将讨论不同场景下调用基类方法以及相关问题。

检查C++中的链表是否为空

发布时间:2023/08/22 浏览次数:127 分类:C++

链表具有多个动态分配的节点,其中包含一个值和一个指针。 本教程将教您三种在 C++ 中检查链表是否为空的方法。C++ 中使用根元素检查链表是否为空 链表中的根充当一个元素,即使链表为空

C++ 中的移动语义

发布时间:2023/08/22 浏览次数:160 分类:C++

在本文中,我们将讨论 C++ 中的移动语义:我们将讨论深拷贝和浅拷贝的相关概念 我们将快速讨论左值和右值的概念。 我们将尝试通过示例来理解移动语义。

在 C++ 中抛出异常

发布时间:2023/08/21 浏览次数:200 分类:C++

C++抛出异常是C++的一个强大功能,可用于处理错误和意外事件。 它主要用于终止程序的执行或将控制权转移到程序的不同部分。在 C++ 中抛出异常

C++ 中抛出超出范围的异常

发布时间:2023/08/21 浏览次数:176 分类:C++

This article discusses how to throw an out of range exception in C++. It also discusses the possible errors while throwing out of range exception in C++.

在 C++ 中抛出异常消息

发布时间:2023/08/21 浏览次数:192 分类:C++

它是通过在程序中可能出现问题的地方抛出异常来执行的。 C++ 中有几个异常处理关键字,但本文将介绍如何使用可变消息引发异常。使用标准 C++ 异常抛出带有消息的异常 - 无效参数

C++ 中的 A Declaration Shadows a Parameter 错误

发布时间:2023/08/21 浏览次数:188 分类:C++

每个对象或变量总是有一些边界、范围或作用域来访问其他类成员,例如由 C++ 中的访问说明符定义为 public、private 或 protected 的数据成员或成员函数。当我们在程序的特定范围或块中多次定义

C++ 中的错误 Error ID Returned 1 Exit Status

发布时间:2023/08/21 浏览次数:130 分类:C++

C++ [Error]: Id returned 1 exit status 不是常见错误。 这通常意味着程序崩溃了,并且在不查看堆栈跟踪的情况下很难确定原因。

C++ 中错误 Too Many Arguments to Function

发布时间:2023/08/21 浏览次数:178 分类:C++

我们在编写一段代码时会遇到很多错误。 解决错误是编程中最关键的部分之一。本文将讨论我们在 C++ 中遇到的一个错误:Too Many Arguments to Function。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便