派生 class 中的重写赋值运算符
Overriding assignment operator in derived class
假设 class D 派生自基数 class B,其中 D 没有任何数据成员
我想出了以下方法来重载赋值运算符 = for class D
#include<iostream>
#include<string>
using namespace std;
class B {
private:
std::string* str = nullptr;
public:
const B& operator=(const B& rhs) {
return *this;
}
};
class D : public B {
public:
D& operator=(const D& empl) {
if ( this != &empl ) {
(B&)(*this) = empl;
}
return *this;
}
};
int main()
{
return 0;
}
因为里面没有数据成员。我可以简单地使用 Base class 赋值运算符。
这是一个正确的实现吗?
我认为更好的实现方式是:
if (this != &empl)
B::operator= (empl);
这避免了转换,充其量是可疑的。
但是,正如@Some 程序员所说,D::operator=
的目的到底是什么?它不会做任何 B::operator=
不会做的事情,所以你不需要它。
假设 class D 派生自基数 class B,其中 D 没有任何数据成员
我想出了以下方法来重载赋值运算符 = for class D
#include<iostream>
#include<string>
using namespace std;
class B {
private:
std::string* str = nullptr;
public:
const B& operator=(const B& rhs) {
return *this;
}
};
class D : public B {
public:
D& operator=(const D& empl) {
if ( this != &empl ) {
(B&)(*this) = empl;
}
return *this;
}
};
int main()
{
return 0;
}
因为里面没有数据成员。我可以简单地使用 Base class 赋值运算符。
这是一个正确的实现吗?
我认为更好的实现方式是:
if (this != &empl)
B::operator= (empl);
这避免了转换,充其量是可疑的。
但是,正如@Some 程序员所说,D::operator=
的目的到底是什么?它不会做任何 B::operator=
不会做的事情,所以你不需要它。