ローカル変数とグローバル変数

ローカル変数とグローバル変数
• ローカル変数
定義された関数内だけで使用できる変数
• グローバル変数
プログラム全体で使用できる変数
ローカル変数とグローバル変数
• ローカル変数
定義された関数内だけで使用できる変数
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;
private:
ユーザー宣言
void __fastcall
Button1Click(TObject
private:
public:
// ユーザー宣言
// ユーザー宣言 *Sender);
private:
ユーザー宣言
public:
__fastcall// TForm1(TComponent*
// ユーザー宣言
Owner);
public:
// ユーザー宣言
}; __fastcall TForm1(TComponent*
Owner);
}; __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;