【发布时间】:2012-06-30 11:20:18
【问题描述】:
我有一个类Derived,它直接继承自两个基类Base1 和Base2。我想知道一般来说,比较指向基类的指针以确定它们是否是相同的Derived 对象是否安全:
Base1* p1;
Base2* p2;
/*
* Stuff happens here. p1 and p2 now point to valid objects of either their
* base type or Derived
*/
//assert(p1 == p2); //This is illegal
assert(p1 == static_cast<Base1*>(p2)); //Is this ok?
assert(static_cast<Derived*>(p1) == static_cast<Derived*>(p2)); //How about this?
指针保证有效,但不一定指向Derived 对象。我的猜测是这可能很好,但我想知道从技术 C++ 的角度来看是否可以。实际上我从来没有对指针做任何操作,我只是想知道它们是否指向同一个对象。
编辑:如果我可以保证 p1 和 p2 指向 Derrived 对象,这似乎是安全的。我基本上想知道如果他们不这样做是否安全-如果一个或两个都指向基础对象,那么比较是否一定会失败?同样,我可以保证指针是有效的(即,p1 永远不会指向 Base2 对象,反之亦然)
【问题讨论】:
-
我的印象是c++不支持多重继承。你的意思是“Base1->Base2->Derived”
-
C++ 确实支持多重继承 :)
-
这是最简单的方法之一,但是是的,C++ 支持 MI
-
"这是射中自己脚的最简单方法之一"不。
标签: c++ inheritance pointers multiple-inheritance