問題タブ [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.
c++ - 多重継承のための仮想メソッド テーブル
この記事を読んでいる「仮想メソッド表」
上記の記事の例:
この記事では、著者は、オブジェクトのメモリ レイアウトが次のd
ようになっていることを紹介しています。
についての質問ですd->f2()
。への呼び出しはポインターをポインターとしてd->f2()
渡すため、次のようにする必要があります。B2
this
元のポインターではなく、B2
ポインターをポインターとして渡す必要があるのはなぜですか??? 実際に D::f2() を呼び出しています。私の理解に基づいて、D::f2() 関数としてポインターを渡す必要があります。this
D
D
this
___アップデート____
B2
D::f2() にポインタを渡す場合、this
D::f2() 内のクラスのメンバにアクセスしたい場合はB1
?? ポインタB2
(これ)は次のように表示されると思います:
この連続したメモリ レイアウトの開始アドレスには、既に特定のオフセットがあります。たとえば、b1
D::f2() 内にアクセスしたい場合、実行時に次のようになると思います: *(this+4)
( this
b2 と同じアドレスを指す)b2
はB
????を指します。
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);
モジュール構成は次のようになります
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
以下は、オブジェクトが右辺値であっても、常に左辺値であることを示唆しています。これは正しいです?可能であれば、標準を参照してください。
出力:
c++ - このポインターを const に設定しないコンストラクターにより、検出されない問題が発生する
読みやすくするために、クラスを最小限にカットします。
MessageFolder.cpp 内
このコードはconst
、messages
. のコンストラクターは、ポインターMessage
を想定していません。したがって、コードは関数ではありませんがconst
this
addToFolders
const
正常にコンパイルされます。b
はconst
メッセージですが、コピー コンストラクターはb
のアドレスを ( を介してaddToFolders()
) から構成されるフォルダーにset
設定するため、ここに問題があります。Message*
低レベルconst
が失われます。Folder
実際、基になるメッセージを変更する関数を定義すると、コンパイル エラーなしでcontents
const メッセージを変更できます。b
解決策は、Folder
の設定をset<const message*>
に変更することですが、これにより、フォルダーを介してメッセージを変更できなくなります (これは実際に望んでいます)。const オブジェクトが作成されるのを防ぐにはどうすればmessage
よいですか? あるいは、this
コンストラクター内のポインターが失敗するconst
ように強制するにはどうすればよいでしょうか?addToFolders()
c++ - C++ オブジェクトのアドレスを巡回する
オブジェクト (動的ではない) は、メモリ内のデータのブロックです。
オブジェクト内の各アイテムを循環して印刷する方法はありますか?
「this」でやってみましたが、エラーが発生し続けます。
タイプが一致しないため、エラーが発生したと思います。しかし、私は本当に解決策を考え出すことができません。動的な型はありますか、それとも何らかの形で型をテストする必要がありますか?