gpt4 book ai didi

c++ - 将子类返回到基类对象

转载 作者:太空宇宙 更新时间:2023-11-04 16:10:53 25 4
gpt4 key购买 nike

我正在努力解决 C++ 中的一些继承问题:

考虑具有方法 method() 的基类 Foo() 及其派生类 Bar。现在我覆盖了 Bar 中的方法。

class Foo{
public:
double method();
}

class Bar public: Foo
{
public:
double method()
}

还有一个像这样的函数:

Foo get_bar(){
Bar bar()
return bar
}

调用函数 get_bar() 我希望能够调用 Bar::method()

Foo foo = get_bar();
foo.method() (-> which should be Bar::method)

这可能吗?如果,如何?我认为我在这里犯了一个我看不到的根本错误。谢谢!

最佳答案

要覆盖(而不是覆盖)一个函数,它必须是虚拟的:

class Foo {
public:
virtual void method();
virtual ~Foo() = default; // technically optional, but usually needed
};

为了完整起见,这里是派生类的更正语法:

class Bar : public Foo {
public:
void method() override; // override is optional, but a good idea
};

多态性仅适用于引用和指针,因此您的函数必须返回其中之一,而不是基类对象。事实上(一旦语法固定),它切片 Bar 对象以返回其 Foo 的拷贝,这不会给你您想要的重写函数。

没有现成的对象可以返回引用;所以你可能必须动态创建一个返回指针。除非您喜欢长时间的调试 session ,否则请使用智能指针来管理动态对象:

std::unique_ptr<Foo> get_bar() {
return std::unique_ptr<Foo>(new Bar); // C++14: make_unique<Bar>();
}

关于c++ - 将子类返回到基类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28814420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com