C++ checking the type of reference

exc*_*ray 4 c++

Is it bad design to check if an object is of a particular type by having some sort of ID data member in it?

class A
{

private:
  bool isStub;
public:
 A(bool isStubVal):isStub(isStubVal){}
 bool isStub(){return isStub;}


};

class A1:public A
{
 public:
 A1():A(false){}
};

class AStub:public A
{
 public:
 AStub():A(true){}
};
Run Code Online (Sandbox Code Playgroud)

编辑1:问题是A包含许多虚函数,A1不会覆盖但存根需要,因为它表明你正在处理存根而不是实际的对象.这里的可维护性是个问题,对于我添加到A的每个函数,我需要在存根中覆盖它.忘记它意味着危险的行为,因为A的虚函数被存根的数据执行.当然我可以添加一个抽象类ABase,让A和Astub继承它们.但是设计变得足够严格以允许这个重构.A的引用持有者保存在另一个B类中.B用存根引用初始化,但稍后根据某些条件,B中的引用持有者用A1,A2等重新初始化.所以当我这样做时BObj.GetA (),我可以检查GetA(),如果refholder持有存根,然后在这种情况下给出错误.不执行该检查意味着,我必须使用适当的错误条件覆盖AStub中A的所有功能.

Ter*_*fey 14

一般来说,是的.你是一半OO,一半是程序性的.

确定对象类型后,您打算做什么?您可能应该将该行为放在对象本身(可能在虚函数中),并使不同的派生类以不同的方式实现该行为.那么你没有理由检查对象类型.

在您的具体示例中,您有一个"存根"类.而不是......

if(!stub) 
{ 
    dosomething; 
} 
Run Code Online (Sandbox Code Playgroud)

打电话吧

object->DoSomething();
Run Code Online (Sandbox Code Playgroud)

并且AStub中的实现是空的