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

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

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

 

2015年12月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

アーカイブ

Google

このブログ記事について

このページは、T-Saitohが2011年4月14日 14:32に書いたブログ記事です。

ひとつ前のブログ記事は「情報構造論・ガイダンス」です。

次のブログ記事は「新入生歓迎会/電子情報」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。