我有一个头文件“Item.h”,“Sword.h”继承了这样的文件:
#ifndef SWORD_H
#define SWORD_H
#include "Item.h"
class Sword: public Item {
public:
Sword(int damage);
~Sword();
};
#endif
我的Item.h是这样的:
#ifndef ITEM_H
#define ITEM_H
class Item{
public:
int damage;
Item(int damage);
int GetDamage();
};
#endif
然后我有一个文件“Sword.cpp”,我想调用Item构造函数(这是Item.cpp):
#include "Item.h"
Item::Item(int damage)
{
this->damage = damage;
}
int Item::GetDamage()
{
return damage;
}
我基本上希望Sword.cpp成为Item.cpp的子类,这样我就可以使用Item的函数,并从Sword.cpp中设置Damage
等变量。我被告知在C ++中没有办法继承构造函数,所以我怎么能这样做呢?有些答案似乎使用了显式关键字,但我永远无法使用它。
请帮忙吗?
答案 0 :(得分:2)
您实际上可以继承构造函数。它是全有或全无,你不能选择哪一个。你就是这样做的:
class Sword: public Item {
public:
using Item::Item;
~Sword();
};
如果你坚持使用pre-C ++ 11编译器,那么你需要声明构造函数并自己实现它。这将是Sword.cpp
中的实现:
Sword::Sword(int damage) : Item(damage) {}
答案 1 :(得分:1)
您不继承构造函数,因为构造函数与类具有相同的名称(显然父级和子级必须具有不同的名称)。但是你可以在子的构造函数
中使用父的构造函数 Sword()
: Item(3) // Call the superclass constructor and set damage to 3
{
// do something
}
答案 2 :(得分:1)
您可以通过以下方式定义Sword构造函数
Sword(int damage) : Item( damage ) {}
如果Item的析构函数是虚拟的并且数据成员损坏应该具有受保护的访问控制,那么也会更好。例如
class Item{
protected:
int damage;
public:
Item(int damage);
virtual ~Item() = default;
int GetDamage();
};
答案 3 :(得分:0)
您可以从派生类的构造函数中调用父的构造函数,如下所示:
Sword(int damage):
Item(damage)
{
}