我正在从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,其中包含基础Material类的属性,该类使用构造函数来设置变量。如何从派生对象访问和更改它们?
答案 0 :(得分: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
的构造函数做同样的事情,把参数传递给基类。
要关闭循环,如果按值传递所有这些参数,每个构造函数都会生成一个单独的向量副本。非常低效。通过使用常量引用,不会创建副本。