C++继承的定义与注意事项

C++继承的定义

C++中的继承是指一个类可以从另一个类中继承属性和行为。被继承的类称为父类或基类,继承的类称为派生类或子类。

在C++中,使用冒号符号来进行继承,语法如下:

class 子类名 : 访问修饰符 基类
{
    //子类的其他内容
};

其中,访问修饰符可以是publicprotectedprivate,用来决定派生类继承来的基类成员的访问权限。

  • public表示公有继承,在派生类中继承来的成员可以被外部访问;
  • protected表示保护继承,在派生类中继承来的成员不能被外部访问,但可以被派生类和其他基类的成员函数访问;
  • private表示私有继承,在派生类中继承来的成员只能被派生类的成员函数访问。

继承的注意事项

  1. 构造函数和析构函数的继承

派生类不会继承基类的构造函数和析构函数,但是在创建和销毁派生类对象时,会先调用基类的构造函数和析构函数,再调用派生类的构造函数和析构函数。

  1. 基类成员的访问权限

在派生类中,继承来的基类成员的访问权限受到访问修饰符的控制。

  • 如果是公有继承,那么继承来的基类成员,无论是公有的、保护的还是私有的,都可以在派生类中被访问;
  • 如果是保护继承,那么继承来的公有成员会变成保护成员,在派生类中只能被该类及其子类访问,而私有成员不会被继承;
  • 如果是私有继承,那么继承来的基类成员都会变成派生类的私有成员,在派生类外部无法访问,只能在该类内部访问。

  • 派生类与基类成员同名

如果派生类中的成员与基类中的成员同名,那么在派生类中访问该成员时,会默认访问派生类中的成员,如果想要访问基类中的成员,则可以使用作用域解析运算符::

class Base
{
public:
    int num = 10;
};

class Derived : public Base
{
public:
    int num = 20;

    void show()
    {
        cout << "Derived num: " << num << endl; //输出20
        cout << "Base num: " << Base::num << endl; //输出10
    }
};

示例说明

示例一

下面这个示例展示了一个简单的好处说明。

#include <iostream>
using namespace std;

class Shape {
   public:
      void setWidth(int w) {
         width = w;
      }

      void setHeight(int h) {
         height = h;
      }

   protected:
      int width;
      int height;
};

// 在派生类中继承基类成员
class Rectangle: public Shape {
   public:
      int getArea() {
         return (width * height);
      }
};

int main(void) {
   Rectangle Rect;

   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

在这个示例中,基类Shape有两个函数setWidth()setHeight()以及两个保护成员widthheight。派生类RectangleShape类中继承了宽度和高度,并且实现了一个新方法getArea(),用来计算矩形的面积。在main()方法中,我们创建了一个Rectangle对象并设置它的宽度和高度,最后输出对象的面积。这个示例演示了一个派生类从基类中继承成员的过程,以及如何在派生类中访问这些成员。

示例二

下面这个示例展示了如何使用作用域解析运算符访问基类中的成员。

#include <iostream>
using namespace std;

class Shape {
   public:
      void setWidth(int w) {
         width = w;
      }

      void setHeight(int h) {
         height = h;
      }

   protected:
      int width;
      int height;
};

// 在派生类中继承基类成员
class Rectangle: public Shape {
   public:
      void setWidth(int w) {
         width = w;
      }

      void setHeight(int h) {
         height = h;
      }

      int getArea() {
         return (width * height);
      }
};

int main(void) {
   Rectangle Rect;

   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

在这个示例中,派生类Rectangle中的方法setWidth()setHeight()与基类Shape中的方法同名。当我们使用Rect.setWidth()时,会默认访问派生类中的setWidth()方法,因此宽度的值不会被传递给基类。为了解决这个问题,我们可以使用作用域解析运算符::访问基类中的setWidth()setHeight()方法,从而正确地设置宽度和高度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++继承的定义与注意事项 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • c语言实现的带通配符匹配算法

    带通配符匹配算法 带通配符匹配算法是一种字符串匹配算法,可以匹配包含通配符的字符串。通配符可以代表任何字符或者一组字符。例如,字符串“a*b”可以匹配“ab”、“acb”、“adfb”等字符串。本文将详细介绍如何使用C语言实现带通配符匹配算法。 实现步骤 我们首先需要确定通配符的类型。一般情况下,通配符分为两种类型:“” 和 “?” 。其中,“” 可以匹配任…

    C 2023年5月22日
    00
  • C++内存管理面经

    C++内存管理面经是很多面试官会问到的问题,因此我们需要掌握相关的知识点。该主题的完整攻略包括以下几个方面的内容。 1. C++内存管理方式 C++提供了两种内存管理方式:栈内存和堆内存。栈内存是由编译器自动分配和释放的,而堆内存需要程序员手动分配和释放。 栈内存 栈内存是一种自动分配和释放的内存,它存储了程序执行过程中的方法调用、本地变量和临时变量。栈内存…

    C 2023年5月30日
    00
  • linux c程序中获取shell脚本输出的实现方法

    获取shell脚本输出是Linux C编程中的一个常见需求,通常的实现方法是通过调用Linux系统的管道机制来实现。下面是具体的攻略: 步骤1:运行shell脚本并将输出写入到管道中 代码示例: $ echo "hello world" > /tmp/output.txt 上述示例向文件output.txt中写入了一行文本。要将其写…

    C 2023年5月30日
    00
  • JSON语法五大要素图文介绍

    详细讲解JSON语法五大要素 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,可以通过文本来表示复杂的数据结构。JSON格式的数据通常会在Web应用程序中用于数据交换,其使用广泛在构建Web服务的过程中。 JSON的语法相对简单,由五个要素组成:值、对象、数组、键和字符串。下面将分别进行介绍。 1. 值 JSON格…

    C 2023年5月23日
    00
  • 红与黑

    有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数(一开始站立的黑砖也要算)。 输入 开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20.每个数据集有H行,其中每行包含W…

    C 2023年4月24日
    00
  • SublimeText编译C开发环境设置

    Sublime Text是一款无比优秀的文本编辑器,支持丰富的插件开发,可进行多种语言的代码编写以及开发环境设置。在这里我们将一步步教你如何设置Sublime Text编译C语言开发环境,并展示其操作示例。 安装必要的软件 在编译C语言的开发环境中,我们需要安装Mingw-w64、Sublime Text和Package Control插件管理器。首先,你需…

    C 2023年5月23日
    00
  • php Try Catch异常测试

    让我来详细讲解一下 PHP 中的异常处理机制 Try Catch 的完整攻略。 什么是异常处理 当 PHP 代码执行遇到错误时,会抛出一个异常,通常这时程序就会直接停止运行并输出一些错误信息给开发者。但是,通过使用 PHP 异常处理机制,我们可以自己定义错误处理程序,来捕获和处理这些抛出的异常,避免程序直接崩溃。 使用 Try Catch 机制进行 PHP …

    C 2023年5月23日
    00
  • VC程序在Win32环境下动态链接库(DLL)编程原理

    VC程序在Win32环境下动态链接库(DLL)编程,主要原理是将一些可重复利用的函数和资源封装进动态链接库文件中,再由其他程序在需要时进行调用,从而提高代码重用性和程序的简洁性。以下是详细的攻略: 1. 创建DLL工程 首先,在VC中新建Win32 DLL工程,在“Win32 Application Wizard”对话框中选择“DLL”类型,之后通过向导一步…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部