C++默认值

And*_*w B 2 c++

问这个问题让我很难过,我知道答案,但我只是完全消错了.

我的程序是一个显示损坏的简单程序.我所需要的就是能够通过功能攻击来调用我的类敌人和boss.所以基本上enemy.Attack()或能够像这样调用enemy.Attack(30)并使输出看起来不同.

这是需要发生的事情:

enemy.Attack() 输出: 10

enemy.Attack(30) 输出: 30

每次我尝试空括号版本时,我都会收到错误"函数不带0参数"

Enemy.h

class Enemy
{
public:
    Enemy();
    void Attack();

private:
    int m_Damage;
};
Run Code Online (Sandbox Code Playgroud)

Enemy.cpp

#include <iostream>

#include "enemy.h"

Enemy::Enemy() : m_Damage(10)
{}

void Enemy::Attack(int damage)
{
m_Damage = damage;
std::cout << "Damage: " << m_Damage << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

Who*_*aig 6

在类成员声明中提供默认参数:

class Enemy
{
public:
    Enemy();
    void Attack(int damage = 10);

private:
    int m_Damage;
};
Run Code Online (Sandbox Code Playgroud)

你的实现的其余部分可以保持原样(虽然我会默认构造m_Damage为零,或者甚至不使用它,因为我不确定你现在需要它).

  • 过载也会起作用.当然,默认参数更简单. (2认同)
  • 对.当与多态性结合时,重载并不会让人混淆:http://coliru.stacked-crooked.com/view?id = f53dbc2bce5580efbcdb35e41217ccbc-25dabfc2c190f5ef027f31d968947336 (2认同)