C++ 从继承变量构造派生类
也许标题有点混乱,所以我会尽最大努力确保它尽可能清晰 基本上,我正在尝试创建一个游戏,其中有一个抽象的基类叫做“生物”,下面有几个派生的幻想生物类 现在我的问题是: 如果我有一个基类,它有受保护的变量int-strength和int-armar,那么我如何使用int-strength和int-armar构造一个派生类,以便它们获得自己的值,而不在该类中实际定义strength和armar变量 让我来写我想要实现的代码C++ 从继承变量构造派生类,c++,class,inheritance,constructor,polymorphism,C++,Class,Inheritance,Constructor,Polymorphism,也许标题有点混乱,所以我会尽最大努力确保它尽可能清晰 基本上,我正在尝试创建一个游戏,其中有一个抽象的基类叫做“生物”,下面有几个派生的幻想生物类 现在我的问题是: 如果我有一个基类,它有受保护的变量int-strength和int-armar,那么我如何使用int-strength和int-armar构造一个派生类,以便它们获得自己的值,而不在该类中实际定义strength和armar变量 让我来写我想要实现的代码 class Creature { public: Creature
class Creature
{
public:
Creature();
private:
int armor;
int strength;
};
class Human: public Creature
{
public:
Human(int a, int b): armor(a), strength(b)
{
}
};
int main()
{
Human Male(30, 50);
cout << Male.armor;
cout << Male.strength;
return 0;
}
类生物
{
公众:
生物();
私人:
内部装甲;
内在力量;
};
人类类:公共生物
{
公众:
人类(智力a,智力b):盔甲(智力a),力量(智力b)
{
}
};
int main()
{
人类男性(30,50);
cout您可以在基类中创建一个以str和armor为参数的构造函数,然后将它们传递给派生类构造函数中的基类构造函数
class Creature
{
public:
Creature(int a, int s) : armor(a), strength(s) {};
protected:
int armor;
int strength;
};
class Human: public Creature
{
public:
Human(int a, int s) : Creature(a, s) {}
};
class Human: public Creature
{
public:
using Creature::Creature;
};
注意:如果您只希望派生类构造一个生物
,则可以使生物
构造函数受保护
如果您想访问armor和str值,您必须添加getter函数,因为armor和strength是受保护的成员变量
class Creature
{
public:
Creature(int a, int s) : m_armor(a), m_strength(s) {};
int armor() const { return m_armor; }
int strength() const { return m_strength; }
protected:
int m_armor;
int m_strength;
};
现在可以使用main()函数:
int main()
{
Human Male(30, 50);
cout << Male.armor();
cout << Male.strength();
return 0;
}
intmain()
{
人类男性(30,50);
cout允许在基类的构造函数中设置这些变量:
class Creature
{
public:
Creature();
protected:
Creature(int armor_, int strength_) : armor(armor_), strength(strength_){}
int armor;
int strength;
};
Human(int armor_, int strength_) : Creature(armor_, strength_){}
现在在派生类中,只需将这些传递给基类:
class Creature
{
public:
Creature();
protected:
Creature(int armor_, int strength_) : armor(armor_), strength(strength_){}
int armor;
int strength;
};
Human(int armor_, int strength_) : Creature(armor_, strength_){}
首先,确保基类具有可以正确初始化其成员变量的构造函数
class Creature
{
public:
Creature(int a, int b): armor(a), strength(b) {}
private:
int armor;
int strength;
};
除非派生类有其他需要初始化的成员数据,否则可以使用以下构造来使用基类构造函数,就像它也是在派生类中定义的一样
class Creature
{
public:
Creature(int a, int s) : armor(a), strength(s) {};
protected:
int armor;
int strength;
};
class Human: public Creature
{
public:
Human(int a, int s) : Creature(a, s) {}
};
class Human: public Creature
{
public:
using Creature::Creature;
};
现在您可以使用:
int main()
{
Human Male(30, 50);
return 0;
}
使用
cout << Male.armor;
cout << Male.strength;
然后将其用作:
cout << Male.getArmor();
cout << Male.getStrength();
对不起,本来应该受到保护的!但是谢谢你的建议。太棒了。非常感谢你!