【发布时间】:2023-03-09 12:15:01
【问题描述】:
我正在为我大学的 c++ 类制作一个简单的 MVC 示例。首先,看代码: executor.h 部分:
class IExecutor {
IParams params;
public:
virtual void initialize(IParams iParams);
virtual void execute();
};
class QEExec : public IExecutor {
public:
void initialize(QEParams iParams) override;
void execute() override;
};
现在是 params.h 部分:
class IParams {
};
class QEParams : public IParams {
public:
int a;
int b;
int c;
};
问题是我想为QEExec 创建void initialize(QEParams iParams) 函数并将QEParams 传递给它,以便访问a、b 和c 参数(稍后我需要)但我可以不要因为virtual void initialize(IParams) 而这样做。我认为如果QEParams 是从IParams 派生的,我将能够这样做,但我无法访问我之前提到的参数。如何使其工作,以便我能够在初始化函数中访问 a、b 和 c 参数?
编辑:我会放一张它应该是什么样子的照片:
https://i.stack.imgur.com/KWaSQ.jpg
【问题讨论】:
-
将参数声明为具有引用类型。
-
你的意思是IExecutor或QEexec中的参数?因为我尝试添加引用,但它仍然会引发类型不匹配错误。
-
@VladfromMoscow 这不起作用:godbolt.org/z/2qnuB_
-
如果我有一个
IExecutor* ex = new QEExec();并打电话给ex->initialize(myIParams);,你期望会发生什么?你的IExecutor界面说我可以做到!您想要明确要求“派生类必须使用从IParams派生的东西进行初始化”的原因是什么? -
这不是覆盖,因为它是不同的类型。有人可以写:
IExecutor *i = new QEExec; IParams p; i->initialize(p);,它会做什么?
标签: c++ class parameters derived-class