繁体   English   中英

C ++从类内部调用重载运算符

[英]C++ Calling overloaded operator from within a class

我有一个从另一个类继承的类,我想调用[index]来访问某些已分配存储的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];

正是我想要的!

您可以说(*this)[0]

在任何版本的C ++中,都没有阻止您使用mem[0]

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

但是,如果您不介意绕过基类的接口(我不会,实际上是将mem private ),则可以编写mem[0]

如果您遇到麻烦,那是由于您的测试用例中没有。 例如, 如果它是类模板的基础成员则由于C ++的奇怪性,您可能需要编写this->mem[0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM