Existe-t-il des méthodes en C++ que je puisse utiliser, telles que la surcharge ou la modélisation, qui me permettraient de passer des instances de classe en tant qu'argument à une fonction cmath? Par exemple, si j'avais une classe nommée "Point" (illustrée ci-dessous), est-il possible de réaliser l'opération std::abs(Point(-4, -9))
et de lui renvoyer Point(4, 9)
?Comment puis-je effectuer une fonction cmath sur une instance de classe personnalisée?
#include <iostream>
#include <cmath>
class Point{
private:
double x, y;
public:
Point(double x, double y) {
this->x = x;
this->y = y;
}
// Approach 1 that I would like to avoid
static Point abs1(const Point &p1) {
return Point(std::abs(p1.x), std::abs(p1.y));
}
// Approach 2 that I would like to avoid
Point abs2(void) {
return Point(std::abs(x), std::abs(y));
}
};
int main()
{
Point pt1(-4.0, -9.0), pt2;
pt2 = std::abs(pt1) // <-- What I would like to be able to do
pt2 = Point::abs1(point_d); // <-- Function call 1 that I would like to avoid
pt2 = point_d.abs2(); // <-- Function call 2 that I would like to avoid
return 0;
}
Ou suis-je limité à l'utilisation des méthodes à base de classe qui me besoin d'appeler Point::abs(Point(-4, -9))
ou Point(-4, -9).abs()
? Donc, en bref, puis-je augmenter la fonction cmath de toute façon pour accepter une instance de classe?
J'ai regardé autour et je ne trouve aucune information sur le sujet, cependant je suis assez nouveau en C++. Donc, j'apprécierais toute information sur la façon dont cela pourrait être fait, si cela peut être fait, et si une telle action est mal avisée, et si oui, pourquoi?
Merci d'avance.