簡體   English   中英

工廠設計和 Inheritance

[英]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;

derivedbase私下繼承的,因此,正如錯誤消息所說,將由new derived創建的derived*轉換為base*是不合法的。 解決方法就是公開繼承:

class derived : public base {};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM