4Pe*_*ent 4 c++ inheritance subclass
在这里,我试图创建基类的子类,Airplane.在我的主要代码中,我还没有尝试使用任何构造函数,因为我只是想确保我可以使子类Fighter正常工作.
它给我的确切错误是
no matching function for call to 'Airplane:Airplane()'
Run Code Online (Sandbox Code Playgroud)
并说这与Fighter.cpp中的这行代码有关
Fighter::Fighter(int engi, int seat, string description)
Run Code Online (Sandbox Code Playgroud)
Fighter.cpp
#include "Fighter.h"
Fighter::Fighter(int engin, int seat, string description)
{
fNumEngines = engi;
fNumSeats = seat;
rangeAndSpeedDesc = description;
}
Run Code Online (Sandbox Code Playgroud)
Fighter.h
#include "Airplane.h"
using namespace std;
#ifndef FIGHTER_H_
#define FIGHTER_H_
class Fighter:public Airplane {
private:
int fNumSeats;
int fNumEngines;
string rangeAndSpeedDesc;
}
Run Code Online (Sandbox Code Playgroud)
Airplane.cpp
#include "Airplane.h"
using namespace std;
Airplane::Airplane(int engines, int seats)
{
numSeats = seats;
numEngines = engines;
}
Run Code Online (Sandbox Code Playgroud)
Fighter::Fighter(int engines, int seats, string desc)
{
fNumEngines = engines;
fNumSeats = seats;
rangeSpeed = desc;
}
Run Code Online (Sandbox Code Playgroud)
相当于:
Fighter::Fighter(int engines, int seats, string desc) : Airplane()
{
fNumEngines = engines;
fNumSeats = seats;
rangeSpeed = desc;
}
Run Code Online (Sandbox Code Playgroud)
除非使用另一个构造函数初始化构造函数实现中的初始化列表中的基类,否则使用默认构造函数初始化基类对象.
这就是编译器无法编译该函数的原因.
你需要:
Airplane,或Airplane初始化列表中的可用构造函数.查看您发布的代码,选项2即可运行.
Fighter::Fighter(int engines, int seats, string desc) :
Airplane(engines, seats), rangeSpeed(desc)
{
}
Run Code Online (Sandbox Code Playgroud)
建议清理
我不明白为什么你需要的成员fNumEngines和fNumSeats在Fighter.基类已经有成员捕获该信息.我建议你删除它们.