所以总结一下,我有一个等价于
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
,但没有用。
在取消引用之前,必须将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);