C++ 如何认识C++;派生类';什么是基类?

C++ 如何认识C++;派生类';什么是基类?,c++,C++,假设我有一个基类a,两个抽象类B和C,以及它们的派生类D和E 如何区分D和E的最后一层类?(D的最后一层类是B,E是C) 代码如下: #include <iostream> using namespace std; class ClassA { public: virtual int testFunc() { return 1; } }; class ClassB : public ClassA { public: virtual int testFunc() override =

假设我有一个基类
a
,两个抽象类
B
C
,以及它们的派生类
D
E

如何区分
D
E
的最后一层类?(
D
的最后一层类是
B
E
C

代码如下:

#include <iostream>
using namespace std;

class ClassA { public: virtual int testFunc() { return 1; } };
class ClassB : public ClassA { public: virtual int testFunc() override =0; };
class ClassC : public ClassA { public: virtual int testFunc() override =0; };

class D : public ClassB { public: virtual int testFunc() override {return 2;} };
class E : public ClassC { public: virtual int testFunc() override {return 3;} };

int main() {
  ClassA * d = new D();
  ClassA * e = new E(); // !!! how can i know e's last layer class C by pointer e?????
  if (somemethod(*e) == somemethod(ClassC)) {  // somemethod is what i want
     // do something
   } else {
     // do something
   }
 }
#包括
使用名称空间std;
类ClassA{public:virtual int testFunc(){return 1;}};
类ClassB:public类A{public:virtual int testFunc()override=0;};
类C:public类A{public:virtual int testFunc()override=0;};
类D:public类B{public:virtual int testFunc()重写{return 2;}};
类E:public类C{public:virtual int testFunc()重写{return 3;}};
int main(){
ClassA*d=新的d();
ClassA*e=new e();/!!!我如何通过指针e知道e的最后一层C类?????
如果(somethod(*e)==somethod(ClassC)){//somethod就是我想要的
//做点什么
}否则{
//做点什么
}
}

我知道
typeid
可能会有帮助,但是代码输出应该是
D
E
,我怎么知道他们的最后一层类?

不确定这是否是您需要的,但是你可以尝试
dynamic\u将
A*
指针投射到
B*
C*
@interjay我只需要判断它们的类类型,我的目的是:
如果(somemethod(*e)==somemethod(ClassC))…
这看起来像一个。如果您正确地执行多态性,那么“最后一层”是什么并不重要。interjay的建议似乎可以做到这一点:
If(auto*c=dynamic_cast(e))
。如果您需要知道这意味着您以错误的方式使用多态性。OOP的全部要点是,您不必知道所使用对象的细节。如果需要进行类型检查,这通常意味着抽象(接口)设计不正确。