ホーム » スタッフ » 斉藤徹 » 参照渡し、コンストラクタ・デストラクタ

2011年4月
« 3月   5月 »
 12
3456789
10111213141516
17181920212223
24252627282930

最近の投稿(電子情報)

アーカイブ

カテゴリー

参照渡し、コンストラクタ・デストラクタ

前回の授業で、クラス宣言とメソッド定義の説明を終えているので、 今日は参照渡しの説明と、コンストラクタ・デストラクタの説明。

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だったら?→エラーが出た…