创建抽象类的动态数组

时间:2017-01-02 20:41:39

标签: c++ arrays class dynamic abstract

我试图创建一个抽象类(CellPhone)的动态数组,然后用Cell1和Cell2类型的不同对象填充它。

我尝试使用动态数组和向量,但都出错:

所有课程都已创建并正常运作,但主要是:

Cell1 c1("Orange", "Hello! This is your friend Rima, call me when you can.", 0777170, "Sony");
Cell2 c2("Zain", "Call me ASAP, Sam", 0777777777, "blue", "wifi");
Cell1 c3("Omnia", "Let me know when you can pass by", 0711111111, "Samsung");

CellPhone *c[3];

*c[0]=&c1;       //Conversion to base class error


vector<CellPhone*>  cp;
cp.push_back(&c1);      //Conversion to base class error

我查了解其他情况,但两种方式我都收到错误?为什么?以及如何解决它?

编辑:以下是供参考的类标题:

 class CellPhone{
  private:
     string branch, message;
     int phoneNumber;
 public:
    CellPhone(string, string, int);
    virtual void receiveCall() = 0;
    void receiveMessage();
    virtual void dial() = 0;
    void setBranch(string);
    void setMessage(string);
    void setPhoneNumber(int);
    string getBranch();
    string getMessage();
    int getPhoneNumber();

};

  #include "CellPhone.h"

 class Cell1:CellPhone{
 private:
     string cameraType;
     bool isCameraUsed;
 public:
     Cell1(string, string, int, string);
     void capture();
     void receiveCall();
     void dial();
     void setCameraType(string);
     string getCameraType();

};

 #include "Cell1.h"

 class Cell2:CellPhone{
 private:
      string wifi, bluetooth;
public:
     Cell2(string, string, int, string, string);
void turnBluetoothOn();
void turnBlueToothOff();
void setWifi(string);
void setBluetooth(string);
string getWifi();
string getBluetooth();
void receiveCall();
void dial();

};

Cell2具有Cell1的引用,因为如果它没有,则主要中会出现类重新定义错误。

1 个答案:

答案 0 :(得分:1)

只需将Cell2 : CellPhone替换为class Cell2 : public CellPhone

否则,无法访问从Cell2CellPhone的转换(如果未指定,继承为private。)

编辑:如下所述,强烈建议您为CellPhone类声明一个虚拟析构函数(建议您在某个时候专注的任何类)。