【发布时间】:2022-01-19 00:03:12
【问题描述】:
我正在为我的大学制作一个项目,在该项目中我正在实施工厂设计,但问题是我无法返回对象的地址,它给出了错误转换“不允许 C++ 转换为不可访问的基类”。
#include<iostream>
using namespace std;
class card
{
protected:
int fee;
int limit;
public:
virtual void setvar() = 0;
};
class silver : card
{
void setvar()
{
fee = 500;
limit = 10000;
}
};
class gold : card
{
void setvar()
{
fee = 1000;
limit = 20000;
}
};
class platinum : card
{
void setvar()
{
fee = 2000;
limit = 40000;
}
};
在这个类 FactoryDesign 的返回行上给出了错误。
class factorydesign
{
private :
factorydesign();
public:
static card* getcard(int c)
{
if (c == 0)
{
return new silver();
}
else if (c == 1)
{
return new gold();
}
else if (c == 2)
{
return new platinum();
}
}
};
int main()
{
int choice;
cout << "0 : Silver card\n1 : Golden Card\n2 : Platinum card \n";
cin >> choice;
card* obj;
obj = factorydesign::getcard(choice);
return 0;
}
谁能详细解释一下为什么会这样?
【问题讨论】:
-
您的
card类缺少虚拟析构函数,因此以多态方式使用是不安全的。
标签: c++ oop inheritance factory-pattern access-modifiers