尝试访问类向量中的函数,无需更改向量的私有状态

时间:2017-03-10 21:52:27

标签: c++ stdvector

我正在尝试找到一种方法来使下面的代码工作,而不会改变betasAlphaVector从私有到公共的访问。也许是一个返回指向所选元素元素的指针的函数,然后可以工作?我不知道。受挫和沮丧。请帮帮忙?

#include <algorithm>
#include <condition_variable>
#include <vector>

using namespace std;

class Alpha {

private:
    int anInt;

public:

    Alpha(int arg) { anInt = arg; }

    Alpha(const Alpha& orig) { }

    virtual ~Alpha() { }

    void Printf() { printf("%s: anInt = %d\n", __func__, anInt); }

};

class Beta {

private:    // Can not change protection (private) status of betasAlphaVector
        std::vector<std::unique_ptr<Alpha>> betasAlphaVector;
public:
    int maxAlphas;

public:

    Beta(int arg) { maxAlphas = arg; }

    Beta(const Beta& orig) { }

    virtual ~Beta() { }

    void AddAlpha(int arg) { betasAlphaVector.emplace_back(new Alpha(arg)); }

    int SizeAlpha() { return (int) betasAlphaVector.size(); }

};

#define MaximumAlphas 3

int main(int argc, char** argv) {

    Beta *beta = new Beta(MaximumAlphas);

    for (int i = 0; i < beta->maxAlphas; i++)
        beta->AddAlpha(i*10);

    printf("%s: Alpha vector size = %d\n", __func__, beta->SizeAlpha());

    beta->betasAlphaVector.at(1)->Printf();

    return 0;
}

1 个答案:

答案 0 :(得分:1)

你几乎给出了答案:

  

也许是一个返回指向所选元素的指针的函数   元素,然后可以工作

将其转换为代码(为简洁起见,省略了其他代码):

class Beta {
public:
    Alpha* GetAlpha( int index ) { return betasAlphaVector.at( index  ).get(); }
    const Alpha* GetAlpha( int index ) const { return betasAlphaVector.at( index ).get(); }
};

即使GetAlpha()对象声明为Beta,第二次重载也可以调用const方法。

main()

beta->GetAlpha( 1 )->Printf();