首页 文章

当派生类添加了数据成员时,派生类的构造函数应该如何在c中

提问于
浏览
0

我是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 :: songlibrary(std :: string,std :: string,std :: string,int,std :: string,std :: string)'中: songlibrary.cpp | 6 |错误:没有匹配函数来调用'movielibrarybase :: movielibrarybase()'| movielibrarybase.cpp | 3 |注意:候选者是:movielibrarybase :: movielibrarybase(std :: string,std :: string,std :: string,int)| movielibrarybase.h | 8 |注意:movielibrarybase :: movielibrarybase(const movielibrarybase&)| songlibrary.cpp | 34 |错误:没有'std :: string songlibrary :: getsong_position()'成员函数在类'songlibrary'中声明

2 回答

  • 4

    在你的情况下,它将是这样的: -

    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 )
    

    这里要注意的一件事是成员初始化列表事项中的序列 . 第一次调用应该是基类,然后是派生类成员 should be initialized in the order in which they are declared in a class .

    此外,类成员按照它们在类中声明的顺序进行初始化,它们在成员初始化列表中列出的顺序不会产生差异 .

  • 1

    对于这种情况,您使用构造函数中的成员初始化列表来调用基类中的正确构造函数:

    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 类中没有默认构造函数,因此发生编译器错误 .

相关问题