【发布时间】:2016-06-19 10:58:02
【问题描述】:
我有一个继承自另一个类的类,我希望调用 [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];或mem[0]。 -
“考虑到我无法从派生类访问该变量,这是访问 mem 元素的正确方法吗” - 您确实可以从派生类访问,因为
mem是声明protected。
标签: c++