2017-03-10 9 views
0

ベータ版のアクセスをプライベートからプライベートに変更することなく、次のコードを動作させる方法を探しています。パブリック。おそらく、選択された要素の要素へのポインタを返す関数は、次に動作しますか?知りません。苦しいと不満。助けてください?ベクタのプライベートステータスを変更しないでクラスのベクタ内の関数にアクセスしようとしています

#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つの提案:)(これはSTD 'の戻り値の型::ベクトル::サイズがあるので、ベータ版:: SizeAlphaは()' 'size_t'型の値を返す'作ります'。これは通常、符号なしの整数です。なぜなら、サイズは決してゼロより小さくならないからです。 'int 'は(ほとんどのプラットフォームで)32ビットのままですが、' size_t'は通常64ビットの符号なし整数にマップされるため、64ビットプログラムの方が優れています。 – zett42

+0

面白いです。私は仕事中のグループにこの問題を送った。あなたが示唆したように私は返されたデータ型としてsize_tを持っていて、彼らは皆不平を言った。だから、私はこのように投稿した。仰るとおりです。あなたの友人を聞かないでください。 –

+0

彼らはどのように主張したのでしょうか? – zett42

答えて

1

あなたはほとんど答えた:その後、コードにそれを回す

を働かせることができる選択 要素の要素へのポインタを返す

はおそらく機能を、(簡潔さのために他のコードは省略されています):

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

2番目のオーバーロードにより、オブジェクトがconstと宣言されている場合でもGetAlpha()メソッドを呼び出すことができます。

main()で:

beta->GetAlpha(1)->Printf(); 
関連する問題