C ++从类

时间:2016-03-05 17:47:08

标签: c++

我有一个继承自另一个类的类,我希望调用[index]来访问某个已分配存储的索引元素。

这是一个最小的例子:

class A
{
    protected:
    double *mem;

    double operator[](const size_t index)
    {
        return mem[index];
    }
}

class B : public A
{
    void function()
    {
        double var = this->operator[](0);
    }
}

所以我在这里通过调用this->operator[](0)来解决这个问题,这很麻烦。

这是访问mem元素的正确方法,考虑到我无法从派生类访问该变量,还是有其他方法?

编辑:我认为我符合C ++ 11可能很重要,因此无法调用mem[0]

编辑,模板类

如下所述,我看到的编译器错误并未出现在此示例中,因为此处没有模板。

重现编译器错误:

template <typename T>
class A
{
    protected:
    double *mem;

    double operator[](const size_t index)
    {
        return mem[index];
    }
}

template <typename T>
class B : public A<T>
{
    void function()
    {
        double var = this->operator[](0);
    }
}

可能的解决方案

return this->operator[](0);
return (*this)[0];
return (this->mem)[0];
return *((this->mem)+0);
return (*this).mem[0];
return *((*this).mem+0);

......我认为所有这些都符合我的期望。还有其他建议吗?

更好的解决方案:

return A::mem[0];

正是我想要的!

2 个答案:

答案 0 :(得分:6)

你可以说(*this)[0]

在任何版本的C ++中,没有什么能阻止你使用mem[0]

答案 1 :(得分:0)

是的,这是一个很好的方法。您可以通过将其写为(*this)[0]来使电话更令人愉悦。

但是,如果你不介意绕过基类的界面(我不会 - 我实际上是mem private),你可以写{ {1}}!

如果你遇到麻烦,那是因为你的测试用例中没有。例如,if it's a base member in a class template, you may need to write this->mem[0] due to a C++ oddity