クラスの定義

01	class Example {
02		public:
03			static const int c_var = 12345;
04			int i_var;
05			void func(int a) {
06				i_var = a;
07			}
08	};
09	int main()
10	{
11		Example x, y, z, w;
12		x.func(10);
13		y.func(20);
14		z.func(30);
15		cout << "最初の状態  x,y,z\n";
16		cout << x.c_var << " " << x.i_var << endl;
17		cout << y.c_var << " " << y.i_var << endl;
18		cout << z.c_var << " " << z.i_var << endl;
19		cout << "***w に x を代入***\n";
20		w = x;
21		cout << "w の値変更  x,y,z,w\n";
22		w.i_var = 40;
23		cout << x.c_var << " " << x.i_var << endl;
24		cout << y.c_var << " " << y.i_var << endl;
25		cout << z.c_var << " " << z.i_var << endl;
26		cout << w.c_var << " " << w.i_var << endl;
27		cout << "x の値変更  x,y,z,w\n";
28		void (Example::*pf)(int);   // ポインタによる関数funcの型宣言
29		pf = &Example::func;   // 関数funcに対するポインタ
30		(x.*pf)(50);   // ポインタによる関数呼び出し
31	//	x.func(50);   // 上3行 や「 x.i_var = 40; 」と同じ
32		cout << x.c_var << " " << x.i_var << endl;
33		cout << y.c_var << " " << y.i_var << endl;
34		cout << z.c_var << " " << z.i_var << endl;
35		cout << w.c_var << " " << w.i_var << endl;
36		Example *px, *pw;
37		px = &x;
38		pw = px;
39		(*pw).i_var = 60;
40		cout << "x のアドレス px を pw に代入  px,pw\n";
41		cout << (*px).c_var << " " << (*px).i_var << endl;
42		cout << (*pw).c_var << " " << (*pw).i_var << endl;
43	}	return 0;
		
01 行目~ 08 行目

  C++ におけるクラスの定義です.クラス外部から常に参照できるためには,public 指定を行い,関数の外側で変数を定義する必要があります.c_var をすべてのオブジェクトで共通な変数とするため,const 指定により変更不可能にしています.また,C++ においては,Example.c_var のような参照方法は利用できません.

19 行目~ 35 行目

  w に x を代入した場合の結果です.オブジェクト x のコピーが w に代入されるため,x と w は異なるオブジェクトとなり,いずれを変更しても,片方はその影響を受けません.また,28 行目~ 30 行目は,関数に対するポインタを利用して関数呼び出しを行っています.Python における,30, 31 行目と似た方法です.

36 行目~ 42 行目

  x のアドレス px を pw に代入した場合の結果です.いずれも同じオブジェクトを指すポインタとなりますので,いずれの変数を介して値を変更しても同じ結果になります.
(出力)
最初の状態  x,y,z
12345 10
12345 20
12345 30
***w に x を代入***
w の値変更  x,y,z,w
12345 10
12345 20
12345 30
12345 40
x の値変更  x,y,z,w
12345 50
12345 20
12345 30
12345 40
x のアドレス px を pw に代入  px,pw
12345 60
12345 60