クラス変数:パブリックアクセスはリードオンリーだが、プライベートアクセスはリード/ライト
2023-08-14 14:54:24
質問
おっと、今のところそのソケットライブラリには取り組んでいません。C++でもう少し教育しようと思っています。
クラスで、ある変数を一般には読み取り専用で、個人的にアクセスするときは読み取り+書き込みにする方法はありますか? 例えばこんな感じです。
class myClass {
private:
int x; // this could be any type, hypothetically
public:
void f() {
x = 10; // this is OK
}
}
int main() {
myClass temp;
// I want this, but with private: it's not allowed
cout << temp.x << endl;
// this is what I want:
// this to be allowed
temp.f(); // this sets x...
// this to be allowed
int myint = temp.x;
// this NOT to be allowed
temp.x = myint;
}
私の質問は、凝縮されたもので、どのようにすれば
x
の中から
f()
の中で、それ以外の場所からは読み取り専用でアクセスできます。
int newint = temp.x;
は許可されているが
temp.x = 5;
は許されないのですか? const 変数のように、しかし
f()
...
EDIT: 大きなベクターインスタンスを返す予定であることを言及するのを忘れていましたが、getX()関数を使用するとそのコピーを作成するだけで、実際には最適ではありません。私はそれへのポインタを返すことができましたが、それは悪い習慣です。
追伸:もし私が基本的にポインターの知識を示したいだけで、それが完全かどうかを尋ねたい場合、どこに投稿すればよいでしょうか?ありがとうございます。
どのように解決するのですか?
もちろん、できます。
class MyClass
{
int x_;
public:
int x() const { return x_; }
};
コピーを取りたくない場合(整数の場合、オーバーヘッドはありません)、次のようにします。
class MyClass
{
std::vector<double> v_;
public:
decltype(v)& v() const { return v_; }
};
またはC++98で
class MyClass
{
std::vector<double> v_;
public:
const std::vector<double>& v() const { return v_; }
};
これはコピーを作成しない。これは への参照を返します。 .
関連
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] C#では、public、private、protected、アクセス修飾子がないことの違いは何ですか?
-
[解決済み] 内部アクセス修飾子 vs. プライベートアクセス修飾子
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み] C++の静的コンストラクタ?プライベートな静的オブジェクトを初期化する必要があります
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] 配列のベクトルを扱う正しい方法