問題タブ [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 投票する
2 に答える
295 参照

c++ - 多重継承のための仮想メソッド テーブル

この記事を読んでいる「仮想メソッド表

上記の記事の例:

この記事では、著者は、オブジェクトのメモリ レイアウトが次のdようになっていることを紹介しています。

についての質問ですd->f2()。への呼び出しはポインターをポインターとしてd->f2()渡すため、次のようにする必要があります。B2this

元のポインターではなく、B2ポインターをポインターとして渡す必要があるのはなぜですか??? 実際に D::f2() を呼び出しています。私の理解に基づいて、D::f2() 関数としてポインターを渡す必要があります。thisDDthis

___アップデート____

B2D::f2() にポインタを渡す場合、thisD::f2() 内のクラスのメンバにアクセスしたい場合はB1?? ポインタB2(これ)は次のように表示されると思います:

この連続したメモリ レイアウトの開始アドレスには、既に特定のオフセットがあります。たとえば、b1D::f2() 内にアクセスしたい場合、実行時に次のようになると思います: *(this+4)( thisb2 と同じアドレスを指す)b2B????を指します。

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

php - PHP $this をクラス内で使用してクラスを参照する

loadModule();classに関数がcoreありますが、モジュールをロードするには、コンストラクトで変数を定義する必要があり、それらの多くはコアを必要とします。この関数は $core で定義されたコア クラスにあるため、単純にloadModule("someModule", $settings, $dbc, $core, $etc...);orを使用しますか? loadModule("someModule", $settings, $dbc, $this, $etc...);私は今混乱しています。助けていただければ幸いです。ありがとう

編集:

使用目的は次のようになります $this->core->loadModule("initialLoad, $settings, $version, $dbc, $parser, $layout);

モジュール構成は次のようになります

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

c++ - C++ *this の値カテゴリは何ですか?

C++ 標準のセクション 9.3.2.1 には、次のように記載されています。

非静的 (9.3) メンバー関数の本体では、キーワード this は、関数が呼び出されるオブジェクトのアドレスを値とする prvalue 式です。クラス X のメンバー関数での this の型は X* です。メンバー関数が const と宣言されている場合、this の型は const X* であり、メンバー関数が volatile と宣言されている場合、this の型は volatile X* であり、メンバー関数が const volatile と宣言されている場合、this の型は const です。揮発性 X*.

thisが prvalue の場合、 の値カテゴリは*this何ですか? *this以下は、オブジェクトが右辺値であっても、常に左辺値であることを示唆しています。これは正しいです?可能であれば、標準を参照してください。

出力:

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

c++ - このポインターを const に設定しないコンストラクターにより、検出されない問題が発生する

読みやすくするために、クラスを最小限にカットします。

MessageFolder.cpp 内

このコードはconstmessages. のコンストラクターは、ポインターMessageを想定していません。したがって、コードは関数ではありませんがconstthisaddToFoldersconst

正常にコンパイルされます。bconstメッセージですが、コピー コンストラクターはbのアドレスを ( を介してaddToFolders()) から構成されるフォルダーにset設定するため、ここに問題があります。Message*低レベルconstが失われます。Folder実際、基になるメッセージを変更する関数を定義すると、コンパイル エラーなしでcontentsconst メッセージを変更できます。b

解決策は、Folderの設定をset<const message*>に変更することですが、これにより、フォルダーを介してメッセージを変更できなくなります (これは実際に望んでいます)。const オブジェクトが作成されるのを防ぐにはどうすればmessageよいですか? あるいは、thisコンストラクター内のポインターが失敗するconstように強制するにはどうすればよいでしょうか?addToFolders()

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

c++ - C++ オブジェクトのアドレスを巡回する

オブジェクト (動的ではない) は、メモリ内のデータのブロックです。

オブジェクト内の各アイテムを循環して印刷する方法はありますか?

「this」でやってみましたが、エラーが発生し続けます。

タイプが一致しないため、エラーが発生したと思います。しかし、私は本当に解決策を考え出すことができません。動的な型はありますか、それとも何らかの形で型をテストする必要がありますか?