迹忆客 专注技术分享

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

C++ 继承构造函数

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

本文是关于 C++ 中的继承概念以及我们如何在派生类中继承基类的构造函数。

C++ 中的继承

在 C++ 中,特别是在面向对象编程中,最基本和最广泛使用的概念是继承。我们可以将一个类定义为另一个类的子类。

这也允许我们重用一些代码功能并减少我们的实现时间。它允许我们将基类的功能和属性派生到派生类中。

  1. 基类——其属性和功能被另一个类使用的类称为基类。它有时也被称为超类。
  2. 派生类——接受另一个类的属性和功能的类称为派生类。它有时也称为子类。

考虑一些车辆的例子。Car、Bus 和 Truck 都是汽车,所有这些汽车都有一些共同的特点,也有一些不同的特点。

由于所有这些都是汽车,并且所有汽车都具有一些统一的功能。如果我们为所有这些汽车创建类,我们将做大量的代码重复。

如下图所示。

继承构造函数

从上图中可以看出,所有汽车都具有相同的功能。这将创建三次重复的代码。

代码重复会产生许多其他问题,例如出错的机会、增加的处理时间等。继承用于克服这种情况。

我们可以创建一个包含所有这些功能的 Automobile 类,并使用该类派生其余类。这样,我们可以减少代码重复并提高代码的可重用性。

继承解决方案

从上图中可以看出,我们减少了重复代码,所有的功能都包含在了所有的类中。继承通常定义 is-a 关系。

例如,汽车 is-a 汽车、圆形 is-a 形状、狗 is-a 动物等。

C++ 中继承的实现

我们需要遵循以下语法从基类派生子类。

class derived-class-name : access-specifier base-class-name
{
    ..
}

这个访问说明符用于决定我们需要如何从基类继承功能。我们是需要全部还是需要其中一些是根据访问说明符决定的。

它可以是 publicprivateprotected。如果我们不指定访问说明符,则默认为 private

例子:

public class Automobile{
    public:
    getFuelAmount();
    applyBrakes();
    startEngine();
    stopEngine();
}
public class Car : public Automobile{
    pressHorn();
}
public class Bus : public Automobile{
    pressHorn();
}

从上面的代码可以看出,两个派生类只有一个函数,两者并不统一,因为所有车辆的喇叭声音都不一样。因此,我们在派生类中制作了该函数,其余的在基类中。

考虑 Shapes 类的另一个示例。

#include <iostream>
#include <string>
using namespace std;
 class Shapes
{
    public:
        int w;
        int h;
};
 class Square : public Shapes
{
    public:
        int getArea()
        {
            return w*h;
        }
};
int main()
{
    Square s;
    s.w =5;
    s.h=5;
    cout<<"Area: " <<s.getArea()<<endl;
    return 0;
}

输出:

Area: 25

C++ 中的构造函数继承

我们可以从前面的示例中看到,函数和属性在派生类中继承自基类。但是如果我们需要调用基类的构造函数,那么我们需要在派生类的构造函数中显式调用它。

构造函数不会自动调用。考虑下面的一个例子。

#include<iostream>
using namespace std;
class baseClass{
    public:
        baseClass()
        {
            cout<<"In constructor: Base"<<endl;
        }
};
class derivedClass : public baseClass
{
    public:
        derivedClass (): baseClass() {
            cout<<"In Constructor: derived"<<endl;
        }
};
int main(){
    derivedClass d;
    cout<<"In main"<<endl;
}

输出:

In constructor: Base
In Constructor: derived
In main

在 C++11 中,这可以使用 using-declaration 来完成。通过 using-declaration,我们可以在基类中使用派生类函数。

上面的例子可以修改如下。

#include<iostream>
using namespace std;
class baseClass{
    public:
        baseClass()
        {
            cout<<"In constructor: Base"<<endl;
        }
};
class derivedClass : public baseClass
{
    using baseClass::baseClass;
    public:
        derivedClass () {
            cout<<"In Constructor: derived"<<endl;
        }
};
int main(){
    derivedClass d;
    cout<<"In main"<<endl;
}

它也将产生相同的输出。

In constructor: Base
In Constructor: derived
In main

转载请发邮件至 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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便