gpt4 book ai didi

c++ - 只有默认参数有效

转载 作者:行者123 更新时间:2023-11-30 01:42:14 25 4
gpt4 key购买 nike

头文件:

MainWindow(QWidget *parent = 0, ColumnHelper column_helper = ColumnHelper() );

.cpp 文件:

MainWindow::MainWindow(QWidget *parent, ColumnHelper column_helper)

用法:

SpreadColumnHelper column_helper;
MainWindow w(0,column_helper);

SpreadColumnHelperColumnHelper 的派生类。

但是在Main()中只获取到默认的ColumnHelper类。

编辑

我希望在 MainWindow() 中传递派生类,但传递了基类。如何传递派生类?

最佳答案

由于 MainWindow 的参数被声明为 ColumnHelper 类型的直接对象,因此它将始终是 ColumnHelper 类型的对象。无论您将什么作为参数传递,它都不可能以某种方式更改其类型。

尝试将 SpreadColumnHelper 作为参数传递只会导致它“切片”到其 ColumnHelper 基础子对象。 ColumnHelper 对象将被 MainWindow 接收(这正是您所观察到的)。

如果您希望您的 column_helper 参数表现多态,您必须将其声明为指针或对 ColumnHelper 的引用,例如

MainWindow(QWidget *parent, ColumnHelper &column_helper)

或者也许

MainWindow(QWidget *parent = 0, const ColumnHelper &column_helper = ColumnHelper())

请注意,只有当参数声明为常量引用时,才能提供临时对象作为默认参数。

关于c++ - 只有默认参数有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39929403/

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