[英]Factory Design and Inheritance
我正在為我的大學制作一個項目,在該項目中我正在實施工廠設計,但問題是我無法返回 object 的地址,它給出了錯誤轉換“不允許將 C++ 轉換為無法訪問的基礎 class”。
#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;
}
};
此 class 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;
}
任何人都可以詳細解釋為什么會這樣嗎?
您需要公開繼承它( class
默認為private
)
class silver : public card
{
//...
};
您無法訪問外部的私人基地,因為它是私人的(如私人成員)
忽略問題中所有不相關的代碼,問題是這樣的:
class base {};
class derived : base {};
base *ptr = new derived;
derived
從base
私下繼承的,因此,正如錯誤消息所說,將由new derived
創建的derived*
轉換為base*
是不合法的。 解決方法就是公開繼承:
class derived : public base {};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.