LotosLabo

プログラミング技術とか気になった情報を載せていきます

C++について6

typedef


int型やdouble型に対して新しい名前をつけるためのキーワード

typedef 型名 識別子;

typedef unsigned long int Count;

これはunsigned long int型にCountという名前を付けたもの。
typedefを使うとCount型の変数numを使うことができます。

Count num = 1;
(unsigned long int num = 1;)

typedefは既にある型に対し、新しい名前をつけることが出来る。


列挙

新しい型を作成することをユーザー定義型という。
ここでは列挙型というのを使う。

列挙型の宣言

enum 列挙型名 {識別子1,識別子2・・・}

enum Week{SUN,MON,TUE};

列挙型の変数を宣言

列挙型名 列挙変数名;

Week w;


例:

enum Week{SUN,MON,TUE};

int main()
{
 Week w;
 w = SUN;
 
 switch(w){
 case SUN: cout << "日曜です\n"; break;
 case MON: cout << "月曜です\n"; break;
 case TUE: cout << "火曜です\n"; break;
 default: cout << "何曜日だかわかりません\n"; break;
 }
 return 0;
}


出力結果

日曜です。

構造体


これもユーザー定義型の一つである。
構造体は異なる方の値をまとめる型となっています。


struct 構造体型名{
型名 識別子;
型名 識別子;
};

struct Car{
int num;
double gas;
}

構造体変数を宣言

構造体型名 構造体変数名;

Car car1;

メンバにアクセス


構造体の上の例で言うと、
numやgasのことをメンバといい、メンバをりようするにはドット演算子(.)を使う

car1.num=123;
car1.gas = 1.23;


構造体の初期化


構造体型名 構造体変数名 = {値,値,・・・}

Car car1 = {1234,1.23};


構造体のポインタへの応用


構造体をポインタを引数とシて使うには
アロー演算子(->)を用いるととても便利です。

構造体へのポインタ -> 構造体メンバ


共用体

これもユーザー定義型の一つです。

union 共用体型名{
型名 識別子;
型名 識別子;
};

同時に値を記憶できるのではなく、全体で一つしか値を記憶することが出来ない。


クラスの宣言


クラスを利用すると複雑なプログラムを効率よく作成することが出来ます。


class 車{
ナンバー;
ガソリン量;
ナンバーを決める;
ガソリンを入れる;
ナンバーとガソリン量を表示;
};

class クラス名{
アクセス指定子;
変数の宣言;
関数の宣言;
};

クラスの場合は変数をデータメンバ、関数をメンバ関数と言います。


メンバ関数の定義

戻り値の型 クラス名::メンバ関数名(引数リスト)
{
}

はスコープ解決演算子でメンバがどのクラスのメンバ関数であるのかを

指定するものです。

例:

class Car{
 public:  //アクセス指定子
  int num;      //データメンバ
  double gas;
  void show(); // メンバ関数
  };

void Car::show()
{
 cout << "車のナンバーは" << num << "です\n";
 }


クラスを利用


オブジェクトの作成

クラス名 変数名;

Car car1;

これはCarクラスの値を記憶できる変数car1の宣言。
このクラス型の変数はオブジェクトまたはインスタンスと呼ばれます。

メンバにアクセス



car1.num = 300;
car1.gas = 10.1;

また、メンバ関数の呼び出しを行う場合にも使います。

car1.show();


例:

// Carクラスの宣言
class Car{
public:
 int num;
 double gas;
 void show();
};
  
// メンバ関数本体の定義
void Car::show()
{
 cout << "車のナンバーは" << num << "です\n";
 cout << "ガソリン量は" << gas << "です\n";
}
  
int main()
{
 Car car1;
   
// データに値を代入
 car1.num = 300; 
 car1.gas = 10.1;
   
 car1.show(); // メンバ関数を呼び出してナンバーとガソリン量を表示
   
return 0;
}



オブジェクトの作成


オブジェクトのためにメモリを開放することをオブジェクトを作成するといい、オブジェクトを利用し終わってメモリが開放されることをオブジェクトを破棄するという。

<オブジェクトを動的に作成>

{
Car* pCar; // Carクラスへのポインタの準備
pCar = new Car; // オブジェクトを動的に作成し、ポインタにアドレスを
  
// アロー演算子を使い、メンバにアクセス
pCar -> num = 300; 
pCar -> gas = 10.1;
  
delete pCar; //オブジェクトを破棄
}