【问题标题】:Problem in copy constructor of a abstract class抽象类的复制构造函数中的问题
【发布时间】:2019-04-27 02:01:13
【问题描述】:

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

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

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;
}

【问题讨论】:

  • 派生类构造函数的语法看起来不正确,你应该使用像MyBook(string t,string a,int p) : Book(t,a)这样的初始化列表
  • 您发布的代码中没有复制构造函数。

标签: c++


【解决方案1】:

这就是你要找的吗?

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 关键字,因为当您与基类中的方法签名不完全匹配时,它可以帮助您生成编译器错误。它可以帮助您避免此类错误。

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 2010-12-02
    • 2023-03-13
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    相关资源
    最近更新 更多