给出以下代码:
#include <string>
using namespace std;
class Base
{
public:
Base(int tagId, const string& value) : m_tagId(tagId), m_value(value) { }
virtual ~Base() { }
virtual string value() { return m_value; }
virtual Base& operator=(const string& value)
{
m_value = value;
return *this;
}
virtual Base& operator=(const Base& rhs)
{
if (this != &rhs)
{
m_tagId = rhs.m_tagId;
m_value = rhs.m_value;
}
return *this;
}
private:
int m_tagId;
string m_value;
};
class Derived : public Base
{
public:
Derived(int tagId, const string& value) : Base(tagId, value) { }
virtual ~Derived() { }
};
以下代码:
Derived a(0, "String A");
a.operator=("String B"); // aka: a = "String B";
给出以下编译错误:
error: no matching function for call to `Derived::operator=(const std::string&)'
note: candidates are: Derived& Derived::operator=(const Derived&)
试图理解为什么Base类中的赋值运算符带有一个const字符串&amp;无法识别参数(并且应该从Base类继承)。这里的目的是允许将字符串配置值上转换为Derived类配置值。
注意:派生类最终将包含更多功能,但出于此问题的目的,它除了从Base继承功能之外没有其他功能。
提前感谢您的帮助!