- 452 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 15:29:31 ]
- >>450
基本的にグローバル変数も自動変数というルールに違いはない。 それは、グローバルスコープに宣言されているという前提になる。 あと、ちょっと妙な書き方をしてしまったので訂正するが、 class Cls{ public: int a; //スタック領域に格納されている自動変数 TestCls b; //同上 }; 上のクラスをnewしたら、自動変数とされる領域もヒープに確保される。でも動作は自動変数と変わらない。 deleteした瞬間がスコープ終了の瞬間。 あと、オーバーライドの話。 C++のオーバーライドはvirtualをつけなかったら、上書きされない。よって、vtableも生成されない。 つまり、基本的には、そのクラスで宣言されたそのメンバ関数が呼ばれる。 virtualをつけてオーバーライドされる前提のメンバ関数は継承先で上書きすることができる。 virtualの上書きされた関数は、基底でも上書きされた関数を呼ぶ。 もちろんインスタンスは実装したクラスのインスタンスじゃないといけないけども。
|

|