Сообщение от Profyelec
|
Да - да. Именно не о статических. Иначе писалось бы все на чистом С.
|
1. Абсолютно непонятно, что требуется в общем случае. Удалять гланды через задницу красиво и методологически правильно просто невозможно в принципе. Весь приведенный выше говнокод можно свести к классике, типа:
//-----------------
class ClassA
{
public:
ClassA() {iSomeData = 0xdead;}
virtual void Visit() {printf("ClassA::Visit()\n");}
private:
int iSomeData;
};
//-----------------
class ClassB : public ClassA
{
public:
virtual void Visit() {printf("ClassB::Visit()\n");}
};
//-----------------
class ClassC : public ClassA
{
public:
virtual void Visit() {printf("ClassC::Visit()\n");}
};
int main(int argc, char* argv[])
{
ClassA ca;
ClassB cb;
ClassC cc;
ca.Visit();
cb.Visit();
cc.Visit();
return 0;
}
2. Если главная задача - допилить напильником что-то уже существующее, то из оригинального поста непонятно, что же надо сделать. Кто мешает использовать наследование и нормальную перегрузку виртуальных функций ? Если уж так хочется геморроя, можно построить иерархию классов, в базовом классе сделать указатель на перегружаемую виртуальную функцию и с ним играться. Более того,
class_b::class_b()
{
ca = new class_a();
...
}
Это просто кривая попытка наследования. Рекомендую почитать что-нибудь типа "Scott Meyers, Effective C++", "Alecsandrescu, Modern C++ design", там весьма хорошо расписаны примеры private наследования, функторов итп.