迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C++ 中通过掷骰子生成随机值

发布时间:2023/04/09 浏览次数:169 分类:C++

本文解释了如何使用时间因子方法和模拟 C++ 中的掷骰子的任意数方法生成随机数。了解它是如何工作的以及它包含哪些缺点。提供了一个 C++ 程序来演示伪数生成器。

在 C++ 中使用模板的链表

发布时间:2023/04/09 浏览次数:158 分类:C++

本文解释了使用模板在 C++ 中创建链表所涉及的各个步骤。工作程序演示了一个链表,该链表使用模板来避免在创建新变量时声明数据类型的需要。

在 C++ 中添加定时延迟

发布时间:2023/04/09 浏览次数:142 分类:C++

本教程将为你提供有关在 C++ 程序中添加定时延迟的简要指南。这可以使用 C++ 库为我们提供的一些函数以多种方式完成。

在 C++ 中创建查找表

发布时间:2023/04/09 浏览次数:155 分类:C++

本文重点介绍如何创建查找表及其在不同场景中的用途。提供了三个代码示例以使理解更容易,并附有代码片段以详细了解代码。

如何在 C++ 中把字符串转换为小写

发布时间:2023/04/09 浏览次数:63 分类:C++

介绍了如何将 C++ std::string 转换为小写的方法。当我们在考虑 C++ 中的字符串转换方法时,首先要问自己的是我的输入字符串有什么样的编码

如何在 C++ 中确定一个字符串是否是数字

发布时间:2023/04/09 浏览次数:163 分类:C++

本文介绍了如何检查给定的 C++ 字符串是否是数字。在我们深入研究之前,需要注意的是,以下方法只与单字节字符串和十进制整数兼容。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便