如何在C ++中更改继承类型的访问类型?

时间:2015-09-26 21:34:45

标签: c++ inheritance

请考虑以下示例:

#include <vector>

using namespace std;

class Table: protected vector<int>
{
public:
    iterator begin();
    iterator end();
}

所有向量的方法都是私有的或受保护的,但公共的begin()end()除外。我可以从Table类的外部调用这两个方法。但是我无法将它们的返回值分配给变量,因为它们的类型受到保护。

Table t;
t.begin();
Table::iterator iter = t.begin(); // this will fail.

如何公开Table::iterator

1 个答案:

答案 0 :(得分:6)

您可以使用使用声明来挑选并选择要在班级中公开的std::vector部分:

class Table: protected vector<int>
{
public:
    using std::vector<int>::iterator;
    ....
    iterator begin();
    iterator end();
};

如果您只想使用std::vector的{​​{1}}和begin成员,则可以说

end

请注意,这会使using std::vector<int>::begin; using std::vector<int>::end; 和非const重载都公开。