当派生类添加了数据成员时,派生类的构造函数应该如何像c++中那样
How is a constructor for a derived class supposed to be like in c++ when derived class has added data member
我是c++的新手。我一直在努力克服这个错误。我知道当一个类派生时,它会继承基类的所有内容,但如果派生类有其他数据成员呢?构造函数应该是怎样的?
当我尝试只放入新的时,我试图将参数传递给构造函数中新创建的类成员,我会得到一个错误,说它与基类的不匹配。当我尝试使用基类并添加新的数据成员时,它告诉我正在重新定义。所以我想知道还有什么可以做来克服这个错误,下面是我的代码。
这是基类:
class movielibrarybase
{
public:
movielibrarybase(string name, string dirname, string gen, int price);
void setname(string name);
string getname();
void setdirector_name(string dirname);
string getdirector_name();
void setgenre(string gen);
string getgenre();
void setprice(int price);
int getprice();
void display();
~movielibrarybase();
protected:
string name;
string director_name;
string genre;
int price;
};
这就是派生类:
class songlibrary: public movielibrarybase
{
public:
songlibrary();
void setartist_name(string name);
string getartist_name();
void setsong_position(string position);
string getsong_position;
~songlibrary();
protected:
string artist_name;
string song_postion;
};
我得到以下错误:
songlibrary.cpp | |在构造函数"songlibrary::songlibrair(std::string,std::字符串,std::字符串,int,std:,std:)"中:|songlibrary.cpp|6|错误:调用"movielibrarybase::movielbrarybase()"没有匹配的函数|movielibrarybase.cpp|3|注意:候选为:movielibarrybase::movielbrarybase(std::string,std::字符串,std:,int)|movielibrarybase.h|8|注意:movielibarrybase::movielbrarybase(const-movielibrarybase&)|songlibrary.cpp | 34 |错误:没有在类"songlibrary"| 中声明的"std::string songlibray::getsong_position()"成员函数
在这种情况下,您可以使用构造函数中的成员初始值设定项列表来调用基类中正确的构造函数:
songlibrary::songlibrary(string name, string dirname, string gen, int price,
string artist_name, string song_position)
: movielibrarybase(name, dirname, gen, price), // initialize base class
artist_name(artist_name), // initialize member in this class
song_position(song_position) {
// other ctor stuff
}
如果不在该列表中声明父类,则它将默认为默认构造函数。由于movielibrarybase
类中没有默认构造函数,因此发生了编译器错误。
在您的情况下,它可能类似于:-
songlibrary::songlibrary( string n, string director, string gen,
int pri, string artist, string song )
: movielibrarybase( n, director, gen, pri ),
artist_name( artist ), song_postion( song )
这里需要注意的一点是,成员初始值设定项列表中的序列很重要。首先应该调用基类,然后派生类成员应该按照它们在类中声明的顺序进行初始化。
此外,类成员是按照它们在类中声明的顺序初始化的,它们在成员初始化列表中列出的顺序与没有任何区别
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- std::vector的包装器,使数组的结构看起来像结构的数组
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何在不产生任何垃圾的情况下获得C中的像素
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- SFML纹理像播放器
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如何在24位SDL_Surface上设置像素的颜色
- 存储模板类型以强制转换回派生<T>
- 当派生类添加了数据成员时,派生类的构造函数应该如何像c++中那样