我正在尝试找到一种方法来使下面的代码工作,而不会改变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;
}
答案 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();