class a:
{
 public: a(){}
};
class b:public a
{
  public:b(){cout<<"is b."<<endl;}
};
main
{
  b* pb=new b();
  a* pa=(a*)pb;
  b* pb2=(b*)pb;
  pb2->a();//这样是可以的
}
”输出为:is b.在聚合中有:
IUnknown* pUnk=preinterpret_cast<IUnknown*>(static_cast<INondelegatingUnknown*>(this));
为什么"pUnk"指向的是INondelegatingUnknown接口???

解决方案 »

  1.   

    http://www.csdn.net/Develop/article/11%5C11637.shtm
      

  2.   

    难道就是reinterpret_cast的作用,不同类型的转型?但是在聚合中本身有包含IUnknown接口,如果按前的例子的话应该得到p指向IUnkown接口,还是有点晕晕的,有没有人能彻底的讲清楚的,小弟感激不尽,呜呜!!!
      

  3.   

    写错了,不好意思,复写如下:
    class a:
    {
     public:a(){}
     public: fa(){}
    };
    class b:public a
    {
      public:b(){}
      public:b(){cout<<"is b."<<endl;}
    };
    main
    {
      b* pb=new b();
      a* pa=(a*)pb;
      b* pb2=(b*)pb;
      pb2->b();//这样是可以的
    }
    ”输出为:is b.在聚合中有:
    IUnknown* pUnk=preinterpret_cast<IUnknown*>(static_cast<INondelegatingUnknown*>(this));
    为什么"pUnk"指向的是INondelegatingUnknown接口,而不是IUnknown,聚合本身不是也包含有IUnknown接口吗???
      

  4.   

    main 中的 b* pb2=(b*)pb 改为 " b* pb2=(b*)pa ",非常对不起。