C ++指针多继承乐趣 [英] C++ pointer multi-inheritance fun

查看:117
本文介绍了C ++指针多继承乐趣的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写一些代码涉及从基本的计数指针类继承;和一些复杂的C ++弹出。我已将其减少如下:



假设我有:

  class A {}; 
class B {};
class C:public A,public B {};

C c;
C * pc =& c;
B * pb =& c;
A * pa =& c

//指向一个有效的A对象?
// pb指向一个有效的B对象?

// pa = pb?

此外,还有:

  // pc ==(C *)pa? 
// pc ==(C *)pb?


$ b

谢谢!

解决方案<
  • pb指向有效的B对象?
  • / li>

    是的, C * 以便 pa pb 指向正确的地址。



    < blockquote>

    • 是pa == pb吗?


    不,通常不是。在同一地址不能有 A 对象和 B 对象。


    此外,




    • pc ==(C *)pa?

    • pc ==(C *)pb?


    该转换将指针转换回 C 对象的地址,因此两个等式都为真。


    I'm writing some code involving inheritance from a basic ref-counting pointer class; and some intricacies of C++ popped up. I've reduced it as follows:

    Suppose I have:

    class A{};
    class B{};
    class C: public A, public B {};
    
    C c;
    C* pc = &c;
    B* pb = &c;
    A* pa = &c;
    
    // does pa point to a valid A object?
    // does pb point to a valid B object?
    
    // does pa == pb ?
    

    Furthermore, does:

    // pc == (C*) pa ?
    // pc == (C*) pb ?
    

    Thanks!

    解决方案

    • does pa point to a valid A object?
    • does pb point to a valid B object?

    Yes, the C* gets converted so that pa and pb point to the correct addresses.

    • does pa == pb ?

    No, usually not. There can't be an A object and a B object at the same address.

    Furthermore, does

    • pc == (C*) pa ?
    • pc == (C*) pb ?

    The cast converts the pointers back to the address of the C object, so both equalities are true.

    这篇关于C ++指针多继承乐趣的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆