The error message in Visual Studio I get 我正在学习c ++,想测试一下东西。 我使用Account(作为抽象基类)和JointAccount(具有从Account的公共继承)创建了一个帐户层次结构。 但是我不知道如何为JointAccount实现复制构造函数和复制赋值运算符。 我尝试了一些尝试,但没有成功。我搜索了,但没有明确的解释。
class Account : public Printable
{
protected:
std::string* name;
double balance;
public:
Account(std::string name, double balance);
Account(const Account& source);
Account(Account&& source);
virtual ~Account();
Account& operator=(const Account& rhs);
Account& operator=(Account&& rhs);
.
.
.
virtual void print(std::ostream& os) const override = 0;
};
Account::Account(Account&& source)
: name{source.name}, balance{source.balance}
{
source.name = nullptr;
}
Account& Account::operator=(Account&& rhs)
{
this->name = rhs.name;
this->balance = rhs.balance;
rhs.name = nullptr;
return *this;
}
class JointAccount final : public Account
{
private:
std::string* secondName;
public:
JointAccount(std::string name, double balance, std::string secondName);
JointAccount(const JointAccount& source);
JointAccount(JointAccount&& source);
virtual ~JointAccount();
JointAccount& operator=(const JointAccount& rhs);
JointAccount& operator=(JointAccount&& rhs);
.
.
.
virtual void print(std::ostream& os) const override;
};
I tried this but it does not work as Account is Abstract VVV
JointAccount::JointAccount(JointAccount&& source)
: Account{source}, secondName{source.secondName}
{
?
}
And as I can't figure out the move constructor, I also can't figure
out how to do the move assignment operator VVV
JointAccount& JointAccount::operator=(JointAccount&& rhs)
{
?
}
答案 0 :(得分:0)
以下是我认为您尝试正确编译的一个基本示例:https://coliru.stacked-crooked.com/a/8a5b64904f262b5a
我怀疑您的问题未能定义要声明为虚拟的函数。解决方案是确保定义了所有非纯虚拟方法。请注意,即使已将析构函数声明为纯虚拟的,也必须对其进行定义。
您尝试的基本结构似乎有效,因此您的问题似乎在实现的其他地方。