Per una classe come questa:
class Foo {
public:
virtual int GetA();
virtual int GetB();
};
Dove dovrei dichiarare una funzione non virtuale GetSumOfAB ()?
1 - Rendilo un metodo di istanza?
class Foo {
public:
virtual int GetA();
virtual int GetB();
int GetSumOfAB() {
return GetA() + GetB();
}
};
2 - Rendilo un metodo statico, quindi era ovvio che fosse correlato alla classe Foo?
class Foo {
public:
virtual int GetA();
virtual int GetB();
static int GetSumOfAB( Foo& foo ) {
return foo.GetA() + foo.GetB();
}
};
3 - O renderlo una funzione gratuita?
namespace Bar {
int GetSumOfAB( Foo& foo );
}
Che ne pensi?
EDIT:
Ho ricevuto molti downvotes strani, quindi vorrei chiarire qual è il problema.
GetSumOfAB () è un algoritmo che utilizza l'API pubblica della classe. Potrebbero esserci molti algoritmi. Dovrei metterli tutti nella classe come metodi di istanza? O dovrei preferire di non ampliare la mia classe?