继承入门C++问题
Inheritance Beginner C++ Issue
我似乎在继承方面遇到了问题。每当我试图重写Character.cpp文件中的函数时,我都会收到一个错误:"不存在类Character的默认构造函数"。我对c++还很陌生,不明白为什么会出现错误。我想做的基本上是覆盖默认Character类的GetFierceAttack(),使其对于名为Ogre的子类更强。我想知道我是否正确使用了"虚拟"。
我的角色.h文件
#ifndef CHARACTER_H
#define CHARACTER_H
#include <time.h>
#include <cstdlib>
class Character
{
protected:
int Health, LightAttack, FierceAttack, Damage;
public:
Character(int health, int lAttack, int fAttack, int damage);
~Character();
public:
int GetHealth() {return Health;}
int GetLightAttack() {return (rand()%5)+10;}
virtual int GetFierceAttack() {return (rand()%5)+10;}
void DeductDamage(int Damage);
};
//Overrides Fierce Attack
class Ogre:public Character
{
public:
Ogre(int health, int lAttack, int fAttack, int damage);
int GetFierceAttack() {return (rand()%10)+20;}
};
#endif
我的Chacter.cpp文件
#include "Character.h"
//Constructor
Character::Character(int health, int lAttack, int fAttack, int damage)
{
Health = health;
LightAttack = lAttack;
FierceAttack = fAttack;
Damage;
}
//Destructor
Character::~Character()
{
}
void Character::DeductDamage(int Damage)
{
Health -= Damage;
if(Health < 0)
{
Health = 0;
}
}
//Constructor
Ogre::Ogre(int health, int lAttack, int fAttack, int damage) //Here's the error
{
}
//Destructor
Ogre::~Ogre()
{
}
当您自己为类定义构造函数时,您将覆盖默认实现。因此,您需要提供默认构造函数作为
class Character
{
public:
Character(){}
//----------your code-----//
}
Similarly for your destructor problem you first decalre destructor in class and then define it in .cpp file.
class Ogre:public Character
{
public:
~Ogre();
}
当为类声明非默认构造函数时,编译器不再生成默认构造函数。
所以你必须自己提供。
当您在派生类上调用构造函数时,会发生以下情况:
- 首先构造基础对象
- 初始化列表中的任何变量都会被初始化
- 执行(派生的)构造函数的主体
如果不指定其他构造函数,则默认构造函数将用于(1)。由于没有默认构造函数,您将遇到编译器错误。
要指定不同的构造函数,请执行以下操作:
Ogre::Ogre(int health, int lAttack, int fAttack, int damage) : Character (health, lAttack, fAttack, damage)
{
// body of constructor
}
然后将调用与这些参数匹配的构造函数实例。既然您已经定义了它,就不会出现错误。
至于析构函数上的错误,首先,正如其他人所说,如果不在类中声明析构函数,就不能覆盖它。因此,您可以将~Ogre()
添加到类定义中。然而,你目前没有在析构函数体内做任何事情,那么你为什么要重新定义它呢?只需将其保留为默认的析构函数即可。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题