在继承std :: vector的类中使用operator []

时间:2016-10-21 20:17:48

标签: c++ inheritance stdvector this-pointer

不起作用

class A : public std::vector<int>
{
    explicit A()
    {
        push_back(5);
        std::cout << *this[0]; 
    }
}
error: no match for 'operator*' (operand type is 'A')
std::cout << *this[0];'

使用*this[0]替换at(0)会使其正常工作。我发现*this[0]返回类型为A而不是int的对象非常奇怪,如at(0)所做的那样。在这个例子中,它们不应该以相同的方式工作吗?

1 个答案:

答案 0 :(得分:3)

错误消息将其丢弃:

points(x, y - beta[1] - c0)

error: no match for 'operator*' (operand type is 'A') 来自哪里? A是一个this,从指针中获取对象的方法是取消引用 - 这样就可以A* const

你想:

this[0]

std::cout << (*this)[0]; 的{​​{3}}高于取消引用 - 您需要确保operator[]首先发生。当然,或者,你可以写下这个烂摊子:

*this

但我建议使用括号。