在学习 OOP 时,我尝试实现一个工厂方法。
说明:在本例中,工厂方法可帮助您创建跨平台 UI 元素,而无需将主程序代码绑定到特定元素类。工厂方法在对话框类中声明。它的子类指的是各种操作系统。多亏了工厂方法,您不必为每个系统重写对话逻辑。子类可以从基本对话框继承几乎所有代码,更改按钮的类型和基本代码构建 GUI 窗口的其他元素。
我失败的实施尝试:
#include <iostream>
#include <string>
using namespace std;
class Button
{
public:
virtual void render();
virtual void onClick(string action);
};
class WindowsButton : public Button
{
public:
void render() override
{
cout << "Windows button rendering..." << endl;
}
void onClick(string action) override
{
cout << "> Windows button onClick event!" << endl;
cout << action << endl;
}
};
class HtmlButton : public Button
{
public:
void render() override
{
cout << "Html button rendering..." << endl;
}
void onClick(string action) override
{
cout << "> Html button onClick event!" << endl;
cout << action << endl;
}
};
class Dialog
{
public:
void render()
{
Button okButton = this->createButton();
okButton.onClick("Close Dialog");
okButton.render();
}
virtual Button createButton();
};
class WindowsDialog : public Dialog
{
public:
Button createButton() override
{
WindowsButton winButton;
return winButton;
}
};
class HtmlDialog : public Dialog
{
public:
Button createButton() override
{
HtmlButton htmlButton;
return htmlButton;
}
};
int main() {
int osType = 0; // 0 - Windows, 1 - Web
Dialog dialog;
if (osType == 0)
{
dialog = WindowsDialog();
}
else if (osType == 1)
{
dialog = HtmlDialog();
};
dialog.render();
}
收到的错误:
我哪里做错了?

阅读多态性,并根据获得的知识,将您当前的代码与工作代码进行比较: