C++如何检查两个clres是否来自同一个对象

Nad*_*led 1 c++ inheritance class c++11

在学习考试的过程中遇到这个问题,会对一个简短的表达进行审查.
如果我有一个class Object和另一个问题:class Point : public Object
现在,如果我Object& O1Object& O2,但Object可能是Point太...
所以我的主要问题是我怎么能检查,如果他们两人都Point因为我需要访问一个字段Object不必须

这是两个类:

类对象{
public:
some functions
};

类点:公共对象{
double x;
双y;
public:
相同功能不同的实现
};

我想访问x,y但我需要确保它是Point第一个.

提前致谢

Joh*_*itb 7

您可以使用dynamic_cast

Object &o = ...;
if(Point *p = dynamic_cast<Point*>(&o)) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

如果动态类型o是a Point或者是从它派生的,那么它中的代码ifp在随时可用的情况下执行(静态类型为ois Object).

如果您已经知道它是a Point,则可以使用引用

Point &p = dynamic_cast<Point&>(o);
// ...
Run Code Online (Sandbox Code Playgroud)

为此,必须至少有一个virtual函数(如果只有析构函数)Object.