抽象类的副本构造函数中的问题

时间:2019-04-27 02:01:14

标签: c++

如何在派生类的抽象类的副本构造函数中插入值

如果删除虚拟函数并创建Base类的对象,或者更改了复制构造函数,但我只能访问Derived类,则该程序运行良好。

class Book{
    protected:
        string title;
        string author;
    public:
        Book(string t,string a){
            title=t;
            author=a;
        }
        virtual void display()=0;
};

class MyBook: private Book
{
public:
    int price;

    MyBook(string t,string a,int p)
    {
        Book(t,a);
        price = p;
    }

    void display()
    {
         ....
    }
};
int main() {

    string title,author;
    int price;
    getline(cin,title);
    getline(cin,author);
    cin>>price;
    MyBook novel(title,author,price);
    novel.display();
    return 0;
}

1 个答案:

答案 0 :(得分:5)

这是您要找的吗?

class MyBook: private Book
{
public:
    int price;

    MyBook(string t, string a, int p) : Book(std::move(t), std::move(a)) {
        price = p;
    }

    void display() override {

    }
};

我不认为您正在寻找复制构造函数。我认为您正在寻找一个显式构造函数。 Book的副本构造函数为Book(const Book& another)

如果您使用的是C ++ 11或更高版本,我也有一些建议。

  1. 使用std::move避免不必要地复制字符串t。
  2. 使用override关键字是因为当您与基类的方法签名不完全匹配时,它可以帮助您生成编译器错误。它可以帮助您避免这种错误。