dポイントプレゼントキャンペーン実施中!

プログラムに詳しい方ご教授お願いします
一般的にクラスからインスタンス(オブジェクト)に実体化する時に、変数と関数だけの クラスの中で、(単にnewされるとかだけでなく)具体的に、数式的に、 どういうことが行われているのですか?
また、そのことはstaticはインスタンス化の必要ないことと何か関係ありますか?

ご教授おねがいします

A 回答 (2件)

言語によって異なりますが、基本的にはスーパークラスを含むそのクラスのインスタンス変数とクラス自体への参照を保管できるだけのメモリ領域を確保して、コンストラクタを上位クラスから順に呼び出すだけですね。


クラス変数(C++とかだとstatic変数)はクラスで共有するのでインスタンス生成の際には確保しません。一般にはクラスをロードする際に確保します。C++だとCのstatic変数と同じで静的に確保されますね。
なおC++だとクラス自体の実行時オブジェクトはなくてコンパイル&リンク時に静的に割り当てられます。仮想関数を使う場合の仮想関数テーブルへはインスタンスごとに参照が作られますけど。
    • good
    • 0
この回答へのお礼

参考になりました
ありがとうございます

お礼日時:2022/01/18 15:43

取敢えず、インスタンスの変数(フィールド)を保持するための


メモリが確保されて、コンストラクタ(初期化ルーチン)が
走るという認識でよいかな。

実際には C++ ではインスタンスの中の仮想テーブルの初期化
とかあるんだけど、知らなくてもなんとかなるので、おいおい
覚えてゆけばよいです。

クラス継承があると、コンストラクタは複数あって、
最上位のクラスのコンストラクタから
下位へ順に実行されるのが普通だけど、仕組みは言語によって
かなり違うので個別に学んだ方がいい。最近は python などを
はじめとして、禁断だった多重継承をサポートする言語が
増えたので、結構複雑な話になるけど、多重継承は
エキスパート向けの機能なので最初は知らなくてOKです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!