C++ 保护/公共(public)重载

标签 c++ overloading public protected

我有这样一个类:

class Foo
{
public:
    Foo()
    {
        for(int i = 0; i < 10; ++i)
            v.push_back(i);
    };
    const vector<double>& V() const {return v;};
protected:
    vector<double>& V() {return v;};
private:
    vector<double> v;
};

然后是一段这样的代码:

Foo foo;
for(int i = 0; i < (int) foo.V().size(); ++i)
    cout << foo.V().at(i) << endl;

但是,后者引发编译错误,指出 V() 调用是 protected 方法,而我只是试图从中读取,而不是修改它。

我已经尝试了以下(但没有成功)。

Foo foo;
const vector<double>& test = foo.V();
for(int i = 0; i < (int) test.size(); ++i)
    cout << test.at(i) << endl;

非常感谢您的帮助。

=====

谢谢大家的解释和解决方案!非常感谢!

最佳答案

不可能重载返回值。当对象是非常量时,将使用非常量方法。可以通过以下方式引导编译器:

const vector<double>& test = const_cast<Foo const&>(foo).V();

或者可能更好的解决方案是让常量方法具有不同的名称(例如:ConstV)。或者您可以只添加这个新方法,而将当前方法留在那里。这种方法在 C++0x 标准中使用。例如常量方法 cbegin()cend() 已添加到标准容器中。

关于C++ 保护/公共(public)重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6135115/

相关文章:

c++ - 为什么在这种情况下编译动态库会出错呢?

c++ - GLSL 4.3 纹理问题

c++ - 删除 OpenCV 中的匹配项(关键点和描述符)

c++ - 函数的模糊引用/值版本

c# - 将数组传递给采用参数 object[] 或 IEnumerable<T> 的函数

PHPDesigner 8 - 本地主机文件夹

c++ - 内存泄漏 C++

c++ - 专门化函数重载的规则

java - 什么时候可以使用公共(public)字段?

c# - 公交公交算法