64,281
社区成员
发帖
与我相关
我的任务
分享
class A
{};
class B : public A
{};
class C : public A
{};
class Foo
: public A
, public B
, public C
{};
int main()
{
Foo* f = new Foo();
B *ptrb = (B*)(Foo*)f;
C *ptrc = (C*)(Foo*)f;
A *ptr = (A*)(Foo*)f; // error
cout << "Hello world!" << endl;
return 0;
}
class A
{};
class B : public A
{};
class C : public A
{};
class Foo
: public B
, public C
{};
int main()
{
Foo* f = new Foo();
A *ptr = (A*)(B*)(Foo*)f;
cout << "Hello world!" << endl;
return 0;
}
22ac2d:0
22ac2e:1
22ac2f:2
22ac2d
Hello world!
#include <iostream>
using namespace std;
class A
{
public:
A(int x = 0){ cout << hex << int(this) << ":" << x << endl; }
};
class B : public A
{
public:
B():A(1){}
};
class C : public A
{
public:
C():A(2){}
};
class Foo
: public A
, public B
, public C
{
};
int main()
{
Foo f;
cout << hex << (int)(&f) << endl;
A* pp = reinterpret_cast<A*>(&f);
cout << "Hello world!" << endl;
return 0;
}
#include <iostream>
using namespace std;
class A {};
class B : public A {};
class C : public A {};
struct A_proxy_t : A { };
class Foo
: public A_proxy_t
, public B
, public C
{};
int main ()
{
A *ptr = (A_proxy_t*)new Foo;
}
A_proxy_t 唯一的作用就是辨别继承路径,并且应该保持空实现。