問題タブ [this-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1373 参照

c++ - 'this' ポインター、'this' ポインターを使用してサブクラスのスーパー クラスの関数を継承する

こんにちは、「this」ポインターの使用方法を理解しようとしています。ここで、クラス BMP のサブクラスであるクラス Image を使用するサンプル プログラムを作成しました。これで、関数 TellWidth と TellHeight が BMP クラスで宣言されました。コンパイラは、TellWidth 関数が Image に存在しないというエラーを表示します。しかし、Image は BMP のサブクラスであるため、BMP の機能を継承するべきではありません。これを解決するにはどうすればよいですか

画像

このクラスは大きすぎてここに投稿できません。関連する抜粋を次に示します

0 投票する
2 に答える
9696 参照

c++ - 同じオブジェクトのメンバー関数へのC++関数ポインターの割り当て

test.calculateの関数ポインター割り当て(およびおそらく残り)を機能させるにはどうすればよいですか?

0 投票する
4 に答える
10529 参照

c++ - shared_ptr と this-pointer

OK、共有ポインターの使用を開始し、可能な限り共有ポインターを渡します。生ポインタへの変換はもうありません。この特定のケースを除いて、これはうまく機能します。

次のように、別のクラスのオブザーバーでもあるクラスがあるとします。

このクラスは、私のアプリケーションでは次のように使用されます。

MyClass は、別のクラスへの共有ポインターを取得し、これを m_otherClass データ メンバーに格納します。DoSomethingImportant メソッドでは、MyClass インスタンスは、次のように m_otherClass のオブザーバーとして自身を登録するなど、多くの重要なことを行います。

m_otherClass->registerObserver(this);

問題は、registerObserver メソッドが次のように定義されていることです。

void registerObserver (std::shared_ptr オブザーバー);

共有ポインターが必要ですが、「this」は生のポインターであり、共有ポインターではありません。

これを解決するには、次の 3 つの方法があります。

  • 通常のポインターを共有ポインターに変換するトリックを見つけます (質問convert pointer to shared_ptr を参照)。しかし、その質問への回答は共有ポインターをコピーすることのみを示唆しており、ポインターを共有ポインターに実際に変換する方法については示唆していません。
  • 「myInstance->DoSomethingImportant(myInstance);」のように、自分自身への共有ポインタをメソッドに渡します。これは少しばかげているようです。
  • オブザーバー部分を別のクラスに入れます。これはやり過ぎのように見え、クラスを理解しにくくする可能性があります。

この問題は、共有ポインタが C++ への単なるアドオンであることを明らかにしています (C# (または一般的に .Net) や Java などの他の言語/環境では同じ問題があるとは思いません)。

この状況を処理する方法に関する他の提案やトリックはありますか?

0 投票する
3 に答える
199 参照

c++ - this = new Foo()? を使用して、オブジェクトのインスタンスを内部から別のインスタンスに設定しますか?

私はハッシュテーブルを扱っていて、それを再ハッシュするために、すべての値を新しいハッシュテーブルに入れ、実行中のインスタンスをこの新しいハッシュテーブルに設定しています。

それが可能かどうか確信が持てなかったので、これが事実であるかどうかを確認したいだけです。やっています:

それがなくても機能しないので、問題は削除行ではないことを私は知っています。これはエラーです: エラー: 代入の左オペランドとして左辺値が必要です。

また、副次的な質問として、割り当てられた配列をコピーするための最良/標準的な方法は何ですか? *a = *b? もちろん、私は C++ の初心者です。知っておくと役に立ちますが、必須ではありません。

0 投票する
5 に答える
897 参照

c++ - 「この」ポインターがたまたま別のオブジェクトを指すのはなぜですか?

クラスがあるとします:

そして、私はこれらの変数定義を持っています:

私が呼び出すと、object1.print() thisたまたまの店の住所にobject1なり、印刷されたxものから取得し、電話すると、たまたまの店舗の住所になり、印刷されたものから取得します。それはどのように起こりますか?object1object2.print() thisobject2xobject2

0 投票する
2 に答える
247 参照

c++ - C ++の内部:this-pointerをいじる

C++の内部動作についていくつか質問があります。たとえば、クラスのすべてのメンバー関数には、暗黙の非表示パラメーターがあります。これは、thisポインターです(Pythonとほぼ同じです)。

関数の有効性がこれの有効性に直接依存していないと仮定するのは間違っていますか(これは単なる別のパラメーターであるため)?つまり、確かに、thisポインターのメンバーにアクセスしようとすると、有効である方がよいのですが、それ以外の場合は、これが削除されても関数は続行されますよね?

たとえば、このポインタを台無しにして、下に表示されているようなことをした場合はどうなりますか?これは未定義の動作ですか、それとも非常に落胆した動作によって定義されていますか?(私は純粋な好奇心から求めています。)

0 投票する
4 に答える
24322 参照

c++ - 「this」ポインタの型

'this'タイトルにもありますが、ポインタの型について教えていただきたいです。

私はプロジェクトに取り組んでおり、'this'ポインターのタイプが"ClassName * const this"VC++ 2008 を使用する Windows にあることを確認しました。このポインターを定数ポインターにする必要性/要件は何かを知りたいと思います。ありがとう。

0 投票する
2 に答える
1100 参照

php - PHPは別のクラスの$thisを割り当てます

$ thisに別のオブジェクトを割り当てることは可能ですか?

CodeIgniterで、メインコントローラーから別のコントローラーを呼び出しています。

application / controllers / module.php

呼び出されたクラス:

MY_Module:

My_Moduleクラスに対してインスタンス化されたクラスの宣言を使用したいと思います。同じライブラリを初期化せず、より多くのリソースを消費しないようにします。

どうすればそれを達成できますか?

アドバイスありがとうございます。

編集:CI_ControllerからMY_Moduleを拡張しようとしました。しかし、すでに一度インスタンス化されているため、問題が発生しています。

0 投票する
1 に答える
26554 参照

c++ - Constの不一致:2つのオーバーロードには'this'ポインターの正当な変換がありません

この奇妙なエラーが発生します:

エラーC2663:'sf :: Drawable :: SetPosition':2つのオーバーロードには'this'ポインタの正当な変換がありません

constの不一致と関係があると思いますが、どこで、なぜかわかりません。次のコードでは、図形とスプライトのベクトルがあり、ベクトルの図形の1つにアクセスしてその関数のいずれかを呼び出そうとすると、エラーが発生します。

どうすればこれを修正できますか?

0 投票する
2 に答える
293 参照

c++ - アウトストリームオペレーターとしてノードを渡す

これは修飾子に関するエラーメッセージを出力しますが、それが何を意味するのか、そしてそれが機能するようにコードを調整する方法を本当に理解していませんか?とにかく、コードを見てくれてありがとう。

注:ostream演算子は、Nodeクラスでフレンドリングされています。