C++ 子类化、赋值运算符和复制构造函数
我有一大堆与此相关的问题,我找不到确切的答案。 类A是主类,B是子类C++ 子类化、赋值运算符和复制构造函数,c++,constructor,copy,operator-keyword,subclassing,C++,Constructor,Copy,Operator Keyword,Subclassing,我有一大堆与此相关的问题,我找不到确切的答案。 类A是主类,B是子类 如果定义了A::operator=(const A&other),那么B::operator=的默认实现是否会复制B的成员,然后调用A::operator= 如果定义了复制构造函数,那么B的复制构造函数的默认实现是否会构造B的成员,然后调用复制构造函数 我是否需要在虚拟中定义上述函数以获得此行为?(我假设operator=为是,copy构造函数为否,因为虚拟构造函数毫无意义?) 我是否可以禁止重载A的子类的赋值运算符或复制构造
B
的默认复制赋值运算符,[class.copy]/28
非联合类X
的隐式定义的复制/移动赋值运算符执行其子对象的成员复制/移动赋值。首先分配X
的直接基类,按照它们在基说明符列表中的声明顺序[即按照它们在class X:/*此处*/{/*…*/};
]之后列出的顺序],然后分配X
的直接非静态数据成员,按照类定义中声明它们的顺序
B
中的虚拟函数重写基类a
中的虚拟函数,它必须具有相同的参数类型。也就是说,您可以有一个虚拟a&operator=(常数&)基类A
中的code>,但是类B
中的重写必须看起来像virtualb&operator=(常数&)
,由于参数类型的原因,不是B
的复制赋值运算符
class A {};
class B { int i; };
A a;
B b = a; // using A::operator=(A const&)
B
的默认复制赋值运算符,[class.copy]/28
非联合类X
的隐式定义的复制/移动赋值运算符执行其子对象的成员复制/移动赋值。首先分配X
的直接基类,按照它们在基说明符列表中的声明顺序[即按照它们在class X:/*此处*/{/*…*/};
]之后列出的顺序],然后分配X
的直接非静态数据成员,按照类定义中声明它们的顺序
B
中的虚拟函数重写基类a
中的虚拟函数,它必须具有相同的参数类型。也就是说,您可以有一个虚拟a&operator=(常数&)基类A
中的code>,但是类B
中的重写必须看起来像virtualb&operator=(常数&)
,由于参数类型的原因,不是B
的复制赋值运算符
class A {};
class B { int i; };
A a;
B b = a; // using A::operator=(A const&)