提问者:小点点

如何返回抽象类指针指向的对象?


所以总结一下,我有一个等价于

class A{
public:
    virtual void foo() const = 0;
};

class B : public A{
public:
    B(){};
    void foo() const override{
        //some code
    };
};

class C{
public:
    C(){};
    B someFunction();
private:
    A* x;
};

a*x;指向某个b对象,我需要somefuntion()返回x所指向的对象。 我试过只做return*x,但没有用。


共2个答案

匿名用户

在取消引用之前,必须将x向下强制转换为b

class C
{
public:
   C() {};
   B someFunction()
   {
      return *static_cast<B*>(x); // like this
   }
private:
   A* x = new B;
};

您还需要提供virtual~a(),以免出现未定义的行为。 何时使用虚拟析构函数?

class A 
{
public:
   virtual void foo() const = 0;
   virtual ~A() = default;
};

匿名用户

如果您知道x指向b对象,那么请先强制转换它。

return *static_cast<B*>(x);