How do I define an operator where one operand is a defined type and the other is an int? I have a class Damage
and defined as such in Damage.h
:
#pragma once
class Damage
{
public:
Damage(int, int = 0, int = 0);
int operator-= (int& num)
{
return num - this->GetDamage();
}
private:
int damage;
int dotDamage;
int dotDamageLength;
};
And I am trying to use the operator like this in Monster.cpp
:
#include "Monster.h"
#include "Damage.h"
int Monster::TakeDamage(Damage& damage)
{
this->health -= damage; // Error Here
return this->health;
}
The error is: "No operator "-=" matches these operands. operand types are int -= damage.
I have also tried using the -
operator too, among my many attempts, defining it outside the class, passing in two different parameters, but nothing has worked yet.
What you're looking to do is define an operator to convert Damage
to an int:
class Damage
{
public:
// ...
operator int () const
{
return this->GetDamage();
}
};
Now that Damage
has an implicit conversion to int
, you can use it in places where such a conversion is desired. In your case, subtraction:
Damage d; // assume that default damage dealt is 3
int health = 4;
health -= d; // health is now 1
This will work:
class Damage
{
public:
Damage(int a, int b = 0, int c = 0)
: damage(a), dotDamage(b), dotDamageLength(c)
{
}
int GetDamage() const { return damage; }
private:
int damage;
int dotDamage;
int dotDamageLength;
};
int& operator -=(int& n, const Damage& damage)
{
n -= damage.GetDamage();
return n;
}
int operator -(int n, const Damage& damage)
{
return n - damage.GetDamage();
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.