参照渡し、コンストラクタ・デストラクタ
前回の授業で、クラス宣言とメソッド定義の説明を終えているので、 今日は参照渡しの説明と、コンストラクタ・デストラクタの説明。
C言語での、値渡しとポインタ渡しの説明を行い、 関数呼び出しでの副作用の範囲を限定できることを説明。 これに加えて、ポインタ渡しを簡単に記述できる参照渡しの説明を行う。
// 参照渡しの例 void foo( int& x ) { x++ ; printf( "%d\n" , x ) ; } void main() { int a = 123 ; foo( a ) ; // 124 foo( a ) ; // 125 }
例年よりは、C言語を分かっているようなので、今後C++のコードを読むと出てきそうな、 const 宣言や、inline 宣言を説明する。 inline 宣言では、Cであれば #define マクロを使っていた様な処理を、 通常の関数呼び出しと同じように書ける。
#define SQR(X) ((X)*(X)) inline int sqr( int x ) { return x * x ; } void main() { printf( "%d\n" , SQR( 1+2 ) ) ; // SQRの冗長な()が無いと... printf( "%d\n" , sqr( 1+2 ) ) ; }
一般的に、プログラムの間違いでは、初期化しないデータによるバグが多い。 オブジェクト指向では、オブジェクトを確実に初期化するための、コンストラクタ機能がある。
class Person { private: char name[ 20 ] ; int age ; public: void print() { printf( "%s %d\n" , name , age ) ; } Person( char s[] , int a ) { strcpy( name , s ) ; age = a ; printf( "Constructor " ) ; print() ; } ~Person() { printf( "Destructor " ) ; print() ; } } ;
質問:デストラクタはユーザが明示的に呼び出せるか?→無理…
自分自身の疑問:デストラクタがprivateだったら?→エラーが出た…