クラスのアクセス修飾子は変更できません。話の終わり。
免責事項:これを含め、ほぼすべてのハックがあります。それらを使用しないでください。
なぜこれが必要なのかを尋ねられたときの質問のコメントに基づいて、他の実行時プロパティに基づいてクラスの実行時プロパティへのアクセスを制御しようとしているようです。たとえば、が>= 42Character
のPowers
場合にのみ、 にアクセスできます。Character
Level
これは C++ 構文の仕組みに関する技術的な質問ではなく、ビジネス ロジックに関する質問です。この質問に対する答えは、C++ の技術的なトリックではなく、プログラムとそのアルゴリズムの設計にあります。
クラスは、物事をモデル化するためによく使用されます。あなたの場合、ゲームのキャラクターです。おそらく、このキャラクターにはレベルとパワーのリストがあります (これを単純にstring
s で表します)。
その場合:
class Character
{
public:
int level_;
vector<string> powers_;
};
...は、キャラクター モデルの単純化された表現です。powers_
の値に基づいて実行時にへのアクセスを制御する場合は、アクセサ メソッドlevel_
を使用できます。
class Character
{
public:
int level_;
vector<string> Powers() const
{
if( level_ >= 42 )
return powers_;
else
return vector<string>();
}
private:
vector<string> powers_;
};
キャラクターのレベルが十分に高い場合にのみ、キャラクターの能力を発揮できるようになりました。
これはまだ非常に単純化された例であり、上記のコードは製品品質ではありません。ただし、アイデアはそこにあります。プログラムのビジネス ロジックを実装するときは、C++ や使用している言語の技術よりも、作成するアルゴリズムに重点を置く必要があります。