A *p=new B; B &r=*(B*)p;对于后边这句不是太清楚

A *pnew B B &r*(B*)p对于后面这句不是太清楚#include iostreamusing namespace stdclass A{public

A *p=new B; B &r=*(B*)p;对于后面这句不是太清楚

#include <iostream>
using namespace std;
class A
{
public:
A()   { cout<<"construct A"<<endl;}
virtual ~A()  { cout<<"destruct A"<<endl; }
void fA() { cout<<"A::fA()"<<endl; }
virtual void vfA() { cout<<"A::vfA()"<<endl; }
void emptyB() { cout<<"A::emptyB()"<<endl; }
void vfAOnly() { cout<<"A::vfAOnly()"<<endl; }
};

class B:public A
{
public:
B() { cout<<"construct B"<<endl;}
~B() { cout<<"destruct B"<<endl;}
void fA() { cout<<"B::fA()"<<endl; }
void fB() { cout<<"B:fB()"<<endl; }
virtual void vfA() { cout<<"B::vfA()"<<endl; }
virtual void vfB() { cout<<"B::vfB()"<<endl; }
void emptyA() { cout<<"B::emptyA()"<<endl;}
virtual void vfAOnly() { cout<<"B::vfAOnly()"<<endl; }
};

void main()
{
A *p=new B;
B &r=*(B*)p;
r.fB();
r.vfA();
r.vfB();
r.emptyA();
r.emptyB();
r.vfAOnly();
delete p;
system("pause");
}


各位能否帮我解释下B &r=*(B*)p,谢谢!
[解决办法]
定义了一个指针p指向的new的对象的引用
[解决办法]
 B &r=*(B*)p;

p 先转成B类型的指针 然后取值 赋给r
 r是一个引用
[解决办法]
A *p=new B;
 B &r=*(B*)p;


一句一句来理解嘛

首先,p是指向A的指针,p指向了B的对象,能这样的话,说明A 是B的基类

p是A* 类型的, 但是p不务正业,指向了派生类 B的对象
(B*)p 就是把p强制转换成B*类型了。
*(B*)p 就是对p解引用, 实际上就是 new B()的对象了
然后 B& r = *(B*)p; 就是定义一个B的引用类型 r ,引用的是B的对象(也就是 new B())

[解决办法]
还原对象的原始类型。

[解决办法]
用dynamic_cast<B*>更安全。

[解决办法]
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!