C++指向"对象"

C++ point to Object

本文关键字:quot 对象 指向 C++      更新时间:2023-10-16

如何检查指向另一个类的指针数组中的元素是否指向另一个类中的对象?

class A  {
//some code hier
};
class B : A {
B ob;
};
class C: B, A {
A* array[100];
void check() {
if (ob* array[100])  {    // ???
//do something
}
}
};

如果类是多态的(即它至少包含一个虚函数(,则可以使用动态强制转换测试指针是否指向特定派生类实例的基。例:

struct X {
virtual ~X() = default;
};
struct Y : X {};
struct Z : X {};

int main() {
Y y;
X* x = &y;
if (Y* y = dynamic_cast<Y*>(x))
; // x indeed does point to (a base of) Y instance
// and y now points to that Y instance
if (Z* z = dynamic_cast<Z*>(x))
; // this is never reached, since x doesn't point to a base of Z
}

指针是否是数组的元素没有区别。

否则(即,如果类不是多态的(,指向一个类的基的指针与指向另一个类的基(相同类型(的指针是无法区分的,因此在这种情况下,这种检查通常是不可能的。可以通过将派生类型的类型信息存储在基的成员中来实现它,但这可能很复杂,并且可能没有用。


附言。

class B : A {
B ob;
};

类不能将自身作为成员。