Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++ Bug] пишу как планировал :-))) 25.07.01 21:53 Число просмотров: 908
Автор: kabanchik Статус: Незарегистрированный пользователь
|
всем сорри ! я спать хотел :-))))
теперь вот как надо
#include <stdio.h>
#include <new.h>
class Parent
{
public:
Parent() { ;}
virtual ~Parent() { ;}
public:
virtual void PrintMsg() { printf("This function called from class Parent.\n"); }
};
class Child: public Parent
{
public:
Child() { ;}
virtual ~Child() { ;}
public:
virtual void PrintMsg() { printf("This function called from class Child.\n"); }
void Magic()
{
// важная строка !!!! разрушаем "старую" virtual table
this->~Child();
// создаем "новый" РОДИТЕЛЬСКИЙ virtual table
new (this) Parent;
printf("Leave Magic.\n");
}
};
int main()
{
Child child;
Child* pChild = &child;
Child& rChild = child;
child.PrintMsg();
pChild->PrintMsg();
rChild.PrintMsg();
printf("\n");
child.Magic();
printf("\n");
child.PrintMsg();
pChild->PrintMsg();
rChild.PrintMsg();
return 0;
}
---
> В результате имеем > This function called from class Child. > This function called from class Child. > This function called from class Child. > > Leave Magic. > > This function called from class Child. > This function called from class Parent. > This function called from class Parent.
результат верный.
> Теперь так же па-руски объясни что ты хотел сказать > конструкцией new (this) Parent; посмотри комментарию, там как раз по-русски написано.
в дополнение - конструктор кроме всего прочего еще и создает таблицу виртуальных ф-ий, который потом разрушается деструктором. вот я и разрушил таблицу, а потом создал, но РОДИТЕЛЬСКИЙ. по результатам следует, что компилятор халтурит - ни хрена не разрушает и не создает. какой-то непонятный блеф разработчиков компилятора.
причем это проявляется во всех компиляторах - ощущуение, что они воровали друг у друга исходники или писал один и тот же "Страуструп" :-)))
надеюсь теперь по-русски :-)))))
regards.
|
|
|