I have:
class A {
virtual void foo() = 0;
virtual void bar() = 0;
};
class Fooing {
virtual void foo() = 0;
};
class Barring {
virtual void bar() = 0;
};
class TallFooing : public Fooing {
void foo(){ std::cout << "tall foo" << std::endl; }
};
class ShortFooing : public Fooing {
void foo(){ std::cout << "short foo" << std::endl; }
};
class BlueBarring : public Barring {
void bar() { std::cout << "blue bar" << std::endl; }
};
class RedBarring : public Barring {
void bar() { std::cout << "red bar" << std::endl; }
};
template <typename S, typename T>
class B : public A, public S, public T { };
int main() {
A* a1 = new B<TallFooing, RedBarring>();
A* a2 = new B<ShortFooing, BlueBarring>();
a1->foo(); a1->bar();
a1->foo(); a2->bar();
};
Is mixing in the Barring classes a "Good Idea" (TM)? Am I doing it right? If not, can you suggest alternatives/improvements for doing the same?
Also, what about the following:
class Fooing {
virtual void foo() = 0;
};
class Barring {
virtual void bar() = 0;
};
class A : public virtual Fooing, public virtual Barring { };
class TallFooing : public Fooing {
void foo(){ std::cout << "tall foo" << std::endl; }
};
class ShortFooing : public Fooing {
void foo(){ std::cout << "short foo" << std::endl; }
};
class BlueBarring : public Barring {
void bar() { std::cout << "blue bar" << std::endl; }
};
class RedBarring : public Barring {
void bar() { std::cout << "red bar" << std::endl; }
};
template <typename S, typename T>
class B : public virtual A, public S, public T { };
and the same main()
?
Notes:
foo()
andbar()
are, indeed, independent, and any combination goes. That is, nothing will break.