gpt4 book ai didi

c++ - 尝试访问类 vector 中的函数而不更改 vector 的私有(private)状态

转载 作者:行者123 更新时间:2023-11-28 05:15:41 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来使下面的代码片段正常工作,而无需将 betasAlphaVector 的访问权限从私有(private)更改为公共(public)。也许返回指向所选元素的元素的指针的函数可以工作?我不知道。受阻和沮丧。帮忙,好吗?

#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;
}

最佳答案

你几乎给出了答案:

Perhaps a function that returns a pointer to the element of a selected element, that can then work

将其转化为代码(为简洁起见省略了您的其他代码):

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();

关于c++ - 尝试访问类 vector 中的函数而不更改 vector 的私有(private)状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42728332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com