Почему бы не сделать
class Foo {
public:
Foo(double a, double b, double c)
:_a(a), _b(b), _c(c)
{}
virtual double get_a() {return _a;}
virtual double get_b() {return _b;}
virtual double get_c() {return _c;}
// more methods
protected:
double _a, _b, _c;
};
хорошо работает как для целых, так и для поплавков:
Foo ifoo(1, 3, 5);
Foo ffoo(2.0, 4.0, 6.0);
и для их смешивания:
Foo mfoo(1, 4.0, 5);
douable место для хранения больше, чем достаточно для int и float