【发布时间】:2025-11-20 13:40:03
【问题描述】:
我正在尝试将名称、skeletonType 和 numLegs 从我的基类继承到派生类。 我有一个名为 Invertebrates 的基类和一个名为 Spider 的派生类。我希望能够将私有变量与我的基类的派生类一起使用。我在第 47 行不断收到编译错误,它在 ',' 之前显示预期的主表达式。
我试图让我的输出看起来像这样:
Spider:Brown Recluse, number of legs = 8, skeleton type = EXOSKELETON
请有人帮助我并指出正确的方向。这是我到目前为止汇总的内容。
// invertebrates.h
// invertebrate specifications
#ifndef _INVERTEBRATE_H_
#define _INVERTEBRATE_H_
#include <iostream>
using namespace std;
enum Skeleton_Type { NONE, HYDROSTATIC, EXOSKELETON };
class Invertebrate {
private:
string name;
Skeleton_Type skeletonType;
int numLegs;
protected:
void setSkeletonType(Skeleton_Type skeletonType);
void setNumLegs(int numLegs);
public:
Invertebrate();
Invertebrate(string name, Skeleton_Type skeletonType, int numLegs);
string getName();
Skeleton_Type getSkeletonType();
int getNumLegs();
virtual void print() = 0;
};
class Spider : public Invertebrate {
private:
const string NAME_PREFIX = "Spider: ";
public:
Spider();
Spider(string name);
virtual void print();
};
#endif // _INVERTEBRATE_H_
**********************************************************************
//invertebrates.cpp
#include "invertebrate.h"
void Invertebrate::setSkeletonType(Skeleton_Type skeletonType)
{
this->skeletonType = skeletonType;
}
void Invertebrate::setNumLegs(int numLegs)
{
this->numLegs = numLegs;
}
Invertebrate::Invertebrate()
{
name = "noName";
skeletonType = NONE;
numLegs = 0;
}
Invertebrate::Invertebrate(string name, Skeleton_Type skeletonType, int numLegs)
{
this->name = name;
this->skeletonType = skeletonType;
this->numLegs = numLegs;
}
string Invertebrate::getName()
{
return this->name;
}
Skeleton_Type Invertebrate::getSkeletonType()
{
return this->skeletonType;
}
int Invertebrate::getNumLegs()
{
return this->numLegs;
}
Spider::Spider(string name):Invertebrate(name,EXOSKELETON,8)
{
name = Invertebrate::getName();
}
void Spider::print()
{
string strSkType = "";
if(this->getSkeletonType() == 0)
strSkType= "none";
else if(this->getSkeletonType() == 1)
strSkType= "Hydrostatic";
else if(this->getSkeletonType() == 2)
strSkType= "exoskeleton";
cout << this->NAME_PREFIX + getName();
cout << ", number of legs = " << this->getNumLegs() << ", skeleton type = " << strSkType << endl;
}
int main()
{
Spider *sp = new Spider("Brown Recluse");
sp->print();
return 0;
}
【问题讨论】:
-
到底是什么问题!?你没有提到它,也没有展示它。
-
看起来不错,您能详细说明您的问题吗?
-
您可以简单地添加一些
protected访问器函数。或者,如果值没有不变量或其他约束,只需将成员变量设为protected -
我不太了解如何实现这一点。我一直在阅读和研究它,但还没有得到它。编译代码时不断出现错误。我无法让它打印我想要打印的内容。就在这里 = Spider:Brown Recluse,腿数 = 8,骨架类型 = EXOSKELETON
-
当你说你得到一个错误时,你真的应该说你得到了什么错误......
标签: c++ class inheritance derived-class base-class