[解決済み] (->) 矢印演算子および (.) ドット演算子、クラスポインタ
2022-03-02 04:49:03
質問
C++では、クラスのポインタには、(
->
のような矢印演算子を使って、そのクラスのメンバにアクセスします。
#include <iostream>
using namespace std;
class myclass{
private:
int a,b;
public:
void setdata(int i,int j){
a=i;
b=j;
}
};
int main() {
myclass *p;
p = new myclass;
p->setdata(5,6);
return 0;
}
の配列を作成します。
myclass
.
p=new myclass[10];
にアクセスすると
myclass
を経由したメンバー(
->
) 矢印演算子を使用すると、以下のエラーが発生します。
base operand of '->' has non-pointer type 'myclass'
を使用してクラスメンバーにアクセスしますが、(
.
) 演算子を使用すると、動作します。これらのことが私を混乱させています。なぜ、(
.
) 演算子で、クラスの配列を指定できますか?
どのように解決するのですか?
との違いについては、こちらをご覧ください。 ポインターとリファレンス この問題を理解するのに役立つかもしれません。
要するに、その差は
を宣言すると
myclass *p
はポインタであり、そのメンバにアクセスするには
->
というのも
p
はメモリの場所を指しています。
を呼び出すと同時に
p=new myclass[10];
p
は配列を指すようになり
p[n]
を使用すると、そのメンバにアクセスする必要があります。
.
.
しかし、もしあなたが
p->member = smth
を呼び出したのと同じになります。
p[0].member = smth
の中に数字があるので
[]
からのオフセットです。
p
で、次の配列のメンバを検索します。
(p + 5)->member = smth
と同じになります。
p[5].member = smth
関連
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み】C/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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] 配列のベクトルを扱う正しい方法