如何使用继承定义父类的函数

How to define a function of parent class using inheritance?

本文关键字:函数 父类 定义 何使用 继承      更新时间:2023-10-16

我已经公开了父类的成员函数。但是我仍然收到错误

在类"摩托车"中没有声明的"void MotorBike::speeddown()"成员函数

无论是speedup还是speeddown.即使我已经公开继承了父类。

#include <iostream>
#include<string.h>
using namespace std;
class Bicycle
{
protected:
    int speed;
    char color[8];
public:
    Bicycle(int, char*);
    void speedup();
    void speeddown();
    void turnLeft();
    void turnRight();
};
class MotorBike:public Bicycle
{
private:
    int currentGear;
    int currentFuel;
public:
    MotorBike(int,char*,int,int);
};
Bicycle::Bicycle(int Speed,char* Color)
{
    speed=Speed;
    strcpy(color,Color);
    cout<<"The bike is now moving north!"<<endl;
}
MotorBike::MotorBike(int Speed,char* Color,int CurrentGear,int CurrentFuel): Bicycle(speed,color)
{
    speed=Speed;
    strcpy(color,Color);
    currentGear=CurrentGear;
    currentFuel=CurrentFuel;
    cout<<"The motorbike is now moving north!"<<endl;
}
void Bicycle::speedup()//error line
{
    cout<<"Speed is increased!"<<endl;
    speed+=1;
}
void Bicycle::speeddown()//error line
{
    if(speed>1)
    {
        cout<<"Speed is decreased!"<<endl;
        speed-=1;
    }
    else
        cout<<"The bike is already at rest!"<<endl;
}
void MotorBike::speedup()//error line
{
    if(currentGear==4)
        cout<<"You are already at maximum speed!"<<endl;
    else
    {
        switch(currentGear)
        {
        case 0:
            currentGear=1;
            currentFuel-=0.01;
            speed+=0.25;
            break;
        case 1:
            currentGear=2;
            currentFuel-=0.02;
            speed+=0.5;
            break;
        case 2:
            currentGear=3;
            currentFuel-=0.03;
            speed+=0.75;
            break;
        case 3:
            currentGear=4;
            currentFuel-=0.04;
            speed+=1;
            break;
        }
    }
}
void MotorBike::speeddown()//error line
{
    if(speed==1||speed>1)
    speed-=1;
    else
        cout<<"You are already at minimum speed!"<<endl;
}
int main()
{
    Bicycle B1(0,"Black");
    MotorBike MB1(0,"Black",0,100);
}

您的MotorBike没有函数speedup也没有speeddown。如果你想要想要,你必须在MotorBike类中声明它,比如

class MotorBike:public Bicycle
{
private:
    int currentGear;
    int currentFuel;
public:
    MotorBike(int,char*,int,int);
    void speedup();
    void speeddown();
};

我只是要从上到下介绍这个问题:

将已弃用#include <string.h>更改为 #include <string>

您的 Bicycle 具有没有定义的函数,如果有人尝试调用它们,它们将产生LNK2019(未解析的外部)。要么定义它们,要么删除它们,要么使 Bicycle 成为抽象类。 自行车也有孩子,所以给它一个虚拟的析构函数。

Bicycle(int, char*);
virtual ~Bicycle() = default;
virtual void speedup();
virtual void speeddown();
virtual void turnLeft();
virtual void turnRight();

您正在定义属于 MotorBike 成员的函数,但您从未声明过它们。将它们添加到摩托车声明中:

class MotorBike:public Bicycle
{
private:
    int currentGear;
    int currentFuel;
public:
    Motorbike(int,char*,int,int);
    void speedup();
    void speeddown();
};

在 MotorBike 中重写 Bicycle 函数时使用 override 关键字:

class MotorBike:public Bicycle
{
private:
    int currentGear;
    int currentFuel;
public:
    Motorbike(int,char*,int,int);
    void speedup() override;  // like this
    void speeddown() override;  // and this
};
或者

,或者,使用摩托车中的自行车实现的任何默认函数:

class MotorBike:public Bicycle
{
private:
    int currentGear;
    int currentFuel;
public:
    Motorbike(int,char*,int,int);
    using Bicycle::speedup;  // like this
    using Bicycle::speeddown;  // and this
};

修正数据类型。MotorBike 将currentGearcurrentFuel声明为整数,但在 MotorBike::speedup 中,例如,您要向它们添加浮点值。这不起作用,因为这些值的小数部分将被截断。