ローカル変数とグローバル変数 ローカル変数 定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数
ローカル変数とグローバル変数 ローカル変数 定義された関数内だけで使用できる変数 エラーになる void add(int a, int b) ローカル変数 定義された関数内だけで使用できる変数 void add(int a, int b) { int c; c = a+b; } void main() add(1,2); printf("%d\n",c); エラーになる
ローカル変数とグローバル変数 グローバル変数 プログラム全体で使用できる変数 グローバル宣言 エラーにならない int c; void add(int a, int b) { c = a+b; } void main() add(1,2); printf("%d\n",c); グローバル宣言 エラーにならない
構造体 複数のデータをまとめた新しい型 メンバ変数 構造体の保持する個々のデータ クラスと構造体 構造体 複数のデータをまとめた新しい型 メンバ変数 構造体の保持する個々のデータ
クラス 構造体に専用のメンバ関数を追加 メンバ関数 クラスのデータの処理を行う関数 クラスと構造体 クラス 構造体に専用のメンバ関数を追加 メンバ関数 クラスのデータの処理を行う関数
クラスの定義方法 ほとんど、構造体と同じ。 メンバ関数が追加 宣言部分と、定義部分を分けて記述できる。
クラスの宣言と定義 ←クラスの宣言 ←クラスのメンバ関数の定義 class TForm1 : public TForm { __published: // IDE 管理のコンポーネント private: // ユーザー宣言 public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); }; ←クラスの宣言 __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } ←クラスのメンバ関数の定義
クラスのメンバの種類 public: クラスの外からも利用できる。 構造体と同じ。 private: クラスのメンバのみ利用できる。 __published: 例えばForm1に貼り付けたコンポーネントや、 コンポーネントのイベントのメンバ関数がBCBにより自動的に追加される。
クラスの宣言と定義 Formにボタンを貼り付けると・・・ ボタンをクリックすると・・・ class TForm1 : public TForm { __published: // IDE 管理のコンポーネント TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // ユーザー宣言 public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); }; class TForm1 : public TForm { __published: // IDE 管理のコンポーネント TButton *Button1; private: // ユーザー宣言 public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); }; class TForm1 : public TForm { __published: // IDE 管理のコンポーネント private: // ユーザー宣言 public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); };
メンバ関数の定義 コンポーネントをクリックするとメンバ関数の定義部分が作られる。 ↑ ここにコード(プログラム)を書く void __fastcall TForm1::Button1Click(TObject *Sender) { } ↑ ここにコード(プログラム)を書く
メンバ関数の定義 そのイベントに対応したメンバ関数、 “イベントハンドラ関数”が用意される オブジェクトインスペクタのイベントタグで イベント名をクリックすると、
メンバ関数の定義 コンポーネントをダブルクリックした場合も オブジェクトインスペクタに登録される。
メンバ関数の書き方 イベントハンドラ以外のメンバ関数は、 クラスの宣言のところにプロトタイプ宣言を 記述する。 privateでもpublicでも良い。 class TForm1 : public TForm { __published: // IDE 管理のコンポーネント TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // ユーザー宣言 void henkou(); public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); };
メンバ関数の書き方 関数の型 クラス名 :: 関数名 引数 { // 実装部 } :: は、この関数がクラスのメンバ関数であることをしめす演算子です。 void TForm1::henkou() { Caption = "Test"; }
メンバ関数の書き方
メンバ変数/メンバ関数への アクセス方法 メンバ変数やメンバ関数を使用する場合は、 参照演算子を使う “ . ”演算子 クラスの変数のメンバにアクセス “->”演算子 クラスのポインタ変数のメンバにアクセス ※コンポーネントやFormはポインタ変数
メンバ変数/メンバ関数への アクセス方法 void TForm1 :: henkou(void) { Caption = "TEST": } では、CaptionはAnsiStringクラスの変数ですが、これはクラスTForm1のメンバ変数なので、 おなじくTForm1のメンバ関数であるhennkou( )で使用する際には、参照演算子はいりません。
メンバ変数/メンバ関数への アクセス方法 Button1のCaptionに変更する場合は、 void TForm1 :: henkou(void) { Button1->Caption = “TEST”: } となります。 Button1はTForm1のメンバ変数、 “Button1のCaptionはButton1自体のメンバ変数” Button1->Captionというように参照演算子“->”を使って、所属をはっきりさせる。 ※Button1はクラスTButtonのポインタ変数なので、 参照演算子は"->"となる。
プロパティ操作による コンポーネントの変更 通常は、オブジェクトインスペクタの プロパティタグで変更できるが、 プログラムでプロパティ変数を直接変更することも出来る。 例: Top=100;