Форум: "Потрепаться";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Внизопределить адрес процедуры из нее самой Найти похожие ветки
← →
VuDZ (2002-03-19 01:51) [14]эт нето....
вот, вот такой пример, только смеяться не надо:
class A{
public:
A(int n){
m_nVal = n;
}
int foo(int);
int m_nVal;
void doo(){
printf("doo\n");
printf("m_nVal = %i\n", m_nVal);
}
};
int A::foo(int n){
printf("foo called\n");
printf("%i\n", n);
doo();
return 0;
}
class B{
public:
int i1, i2, i3, i4;
B(){
i1 = 1;
i2 = 0x2;
i3 = 0x3;
i4 = 0x4;
}
void bInit(){
i1 = 1;
i2 = 0x2;
i3 = 0x3;
i4 = 0x4;
}
double foo(){
printf("B::foo()\n");
printf("%i = i1\n", i1);
return 0.0;
}
void v(){
printf("B::v\n");
printf("%i = i2\n", i2);
}
void doo(){
printf("B::doo()\n");
printf("%i = i3\n", i3);
}
void doo2(){
printf("B::doo2()\n");
printf("%i = i4\n", i4);
}
};
class Stub{
};
int main(){
int k = 666;
B b = *reinterpret_cast<B*>(&k); // !!! from integer to class
b.bInit(); // only for variables initialization, nothing more
b.foo();
b.v();
b.doo();
b.doo2();
A n = (A)*(reinterpret_cast<A*>(&b));
n.A(1234);
n.doo();
n.foo(777);
printf("%i\n", k);
return getch();
}
PS из-за n.A(1234);, явного вызова конструктора, это соберут не все компиляторы, MS VC++ послал меня в пешее эротическое путешествие, так сильно это мотивируя, что захотело его стереть.
смысл, я думаю ясен - int -> B - > A, и всё работает, только вот переменный надо инициализировать, а то глюки могут быть. Хотя тут ничего особогои нет.
Для контроля- вывод:
B::foo()
1 = i1
B::v
2 = i2
B::doo()
3 = i3
B::doo2()
4 = i4
doo
m_nVal = 1234
foo called
777
doo
m_nVal = 1234
666
sya
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c