#include enum T { INT, DOUBLE, STRING }; class A { public: T t; int i; double d; char *s; A (enum T); }; class B : public A { public: B (int); B (double); B (const char *); }; A::A (enum T t) { this->t = t; } B::B (int i) : A (INT) { this->i = i; } B::B (double d) : A (DOUBLE) { this->d = d; } B::B (const char *s) : A (STRING) { this->s = strdup (s); } int main () { A a1 = B (123); A a2 = B (1.23); A a3 = B ("foo"); return 0; }