c++在派生类中定义复制赋值
c++ Defining copy assignment in derived class
所以我有下面的简单代码
#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);
。
相关文章:
- 对复制 CTOR 和 CTOR 的未定义引用
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 在构造函数中使用关键字 "this" 时定义复制构造函数
- 自定义复制动态数组
- 如何在C++中使用默认和自定义复制构造函数
- 只手动定义复制构造函数和赋值运算符的一部分
- 是否应始终为具有原始指针成员的类中的深层复制指针定义复制构造函数
- 如果我们只定义复制构造函数/oper=,为什么移动构造函数/move赋值没有隐式声明和定义为删除
- 视觉C++:我可以强制我的程序员为每个类定义复制构造函数吗?
- c++在派生类中定义复制赋值
- 什么时候最好定义复制构造函数
- 关于C++中的分段错误的问题很可能是由自定义复制构造函数引起的
- 抽象基类:如何为包含指向(抽象)基类指针的类定义复制构造函数或赋值操作符
- 禁止在继承类中定义复制构造函数
- 在用户定义复制构造函数中隐式复制构造函数的使用
- 编译器的区别:扩展x3::变体需要用gcc定义复制构造函数、复制赋值运算符和默认构造函数,但不需要clang
- 定义复制构造函数和赋值操作符
- C++从函数返回对象时使用自定义复制构造函数
- 自定义复制赋值操作符使程序崩溃(c++)