如何在派生类的抽象类的副本构造函数中插入值
如果删除虚拟函数并创建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;
}
答案 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或更高版本,我也有一些建议。
std::move
避免不必要地复制字符串t。override
关键字是因为当您与基类的方法签名不完全匹配时,它可以帮助您生成编译器错误。它可以帮助您避免这种错误。