如何使用继承定义父类的函数
How to define a function of parent class using inheritance?
我已经公开了父类的成员函数。但是我仍然收到错误
在类"摩托车"中没有声明的"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 将currentGear
和currentFuel
声明为整数,但在 MotorBike::speedup
中,例如,您要向它们添加浮点值。这不起作用,因为这些值的小数部分将被截断。
相关文章:
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 两个父类的构造函数的序列
- C++调用使用重写函数的父类函数
- 在父类中公开受保护的构造函数
- 从父类的向量访问子类函数,而无需向下转换
- 将派生类的构造函数声明为父类的友元
- 如何从子类的构造函数初始化父类的私有成员
- 具有纯虚函数和指针数组对象类型的父类的指针数组
- 在父类函数中创建子类 - 可能吗?
- 调用父类函数来比较父类和子类
- 从多重继承中的派生类函数调用适当的父类函数
- 是否有 lint 工具可以检查子类虚拟函数是否与父类定义匹配?
- 无法使父类的虚拟函数正常工作
- 重写子类构造函数中的父类变量
- 构造函数将父类作为参数
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 如果不手动完成,子类是否继承父类的析构函数?
- 当函数返回类型为父类时,如何返回子类的对象?
- 将子类的成员函数强制转换为父类
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用