c++在派生类中定义复制赋值

c++ Defining copy assignment in derived class

本文关键字:定义 复制 赋值 派生 c++      更新时间:2023-10-16

所以我有下面的简单代码

#include <iostream>
class Base {
public:
  virtual int GetX() const = 0;
  virtual int GetY() const = 0; 
  virtual Base& operator=(const Base&) = 0;
protected:
  int x;
};
class Derived : public Base {
public:
  Derived(int a = 0, int b = 0):y(b){x=a;};
  Base& operator=(const Base&);
  int GetX() const{return x;}
  int GetY() const{return y;}
  void Print(){std::cout << x << y << std::endl;}
private:
  int y;
};
Base& Derived::operator=(const Base& t)
{
  y = t.GetY();
  x = t.GetX();
  return *this;
}
int main()
{
  Derived A(1,2);
  Derived B;
  B = A;
  A.Print();
}

我的问题是运算符=的定义,因为我得到了以下错误,除非我注释行B=A:

In function `Derived::operator=(Derived const&)':
File.C:(.text._ZN7DerivedaSERKS_[_ZN7DerivedaSERKS_]+0x1f): undefined reference to `Base::operator=(Base const&)'
collect2: error: ld returned 1 exit status

我在复印作业上试过很多变通办法,但都不管用。我需要在基类中定义它,因为我想要另一个派生类(derived2),理想情况下,我甚至可以在派生类之间相等。

编辑:粘贴了错误的代码

因为您没有实现Derived::operator=(Derived const &),所以编译器为您提供了一个默认的调用Base::operator=(Base const &)的编译器,但它并不存在。

如果希望B = A进行编译和链接,则必须实现Derived::operator=(Derived const &)Base::operator=(Base const &)

你可以做B = static_cast <Base const&> (A);