c++ - 虚拟分配

标签 c++

我在理解这个问题时遇到了一些问题。

我有一个类:

class StringProperty { //snipped...
protected:
    std::string s;
public:
    virtual StringProperty& operator= (const std::string &x) {
        s = x;
        return *this;
    }
    virtual StringProperty& foo(const std::string &x) {
        s = x;
        return *this;
    }
};

这个类(它有更多的方法,为简单起见被剪掉了)应该作为一个字符串。

当我从中得出时:

class Test : public StringProperty { };

我想做这样的事情:

Test x;
x = "test";

但是,这失败得很惨(无法编译):

error: no match for ‘operator=’ in ‘x = "test"’

尽管如此,如果我使用

x.foo("test");

它有效。 我有兴趣了解它失败的原因,因为对我来说这两个功能是相同的。

谢谢。

最佳答案

您的 Test 类包含一个隐式声明的复制赋值运算符(以及默认构造函数、复制构造函数和析构函数)。这隐藏了基类中的那个。为了将其视为重载,您必须使其在派生类中可访问:

class Test : public StringProperty {
public:
    using StringProperty::operator=;
};

关于c++ - 虚拟分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9504106/

相关文章:

c++ - 如何在C++中将文件夹从一个路径复制到另一个路径

c++ - 将 std::map 与 std::list::iterator 一起使用

c++ - 用于选择 vector/集合元素的位掩码?

c++ - 对象层次结构中的对象删除责任

c++ - 使用C获取文件夹中的文件列表

c++ - 头尾打印比检查结束或开始更有效吗?

c# - 纹理映射 - 拉伸(stretch)

c++ - 为什么这段使用 printf 和 cout 的代码没有预期的输出?

c++ - 在 if(指针)条件内递增指针

c++ - 为什么我的程序在启动前就崩溃了?