2016-03-13 60 views
1

我正在从CSV文件读取一行到一个向量中,然后我想将此向量传递到正确的派生类中,因此请使用正确的私有属性创建一个对象。但是,如何将向量传递给基类,而不仅仅是传递给派生的对象?使用基础构造函数创建派生对象

基类:

class Material 
{ 
public: 
    Material() ; 
    virtual ~Material() ; 

    void addNewMaterial(); 

private: 

    std::string type; 
    std::string format; 
    int idNumber; 
    std::string filmTitle; 
    std::string audioFormat; 
    float runtime; 
    std::string language; 
    float retailPrice; 
    std::string subtitles; 
    std::string frameAspect; 
    std::string bonusFeatures; 
}; 

派生类:

class Disk : public Material 
{ 
public: 
    Disk(); 
    ~Disk(); 

private: 

    std::string packaging; 

    std::string audioFormat; 
    std::string language;  //multiple language tracks 
    std::string subtitles; //subtitles in different languages 
    std::string bonusFeatures; //bonus features 

}; 

第二派生类

class ssDVD : public Disk 
{ 
public: 
    ssDVD(std::vector<std::string>); 
    ~ssDVD(); 

private: 

    //plastic box 

}; 

我想创建一个新的ssDVD与基材类的特性,这使用构造函数来设置变量。如何从派生对象访问和更改这些对象?

回答

1

您的派生类的构造函数将需要将其参数传递给它的父类的构造函数。

首先,在大多数情况下,它更有效地传递非POD功能参数,经常提到,为了避免值拷贝大对象:

class ssDVD : public Disk { 
public: 
    ssDVD(const std::vector<std::string> &); 

    // ... 
}; 

然后,构造函数通过其参数父类的构造函数,按值:

ssDVD::ssDVD(const std::vector<std::string> &v) : Disk(v) 
    // Whatever else the constructor needs to do 
{ 
    // Ditto... 
} 

当然,你必须有Disk的构造做的一样,将参数传递给基类。

并且要关闭循环,如果您按值传递了所有这些参数,则每个构造函数都会创建一个单独的向量副本。非常低效。通过使用常量引用,不会创建副本。

相关问题