01 /****************************/
02 /* 変数の有効範囲(スコープ) */
03 /* coded by Y.Suganuma */
04 /****************************/
05 #include <stdio.h>
06
07 /*******************/
08 /* クラス Example1 */
09 /*******************/
10 class Example1 {
11 int pri;
12 protected :
13 int pro;
14 public :
15 int pub;
16
17 Example1() {
18 pub = 1000;
19 pri = 2000;
20 pro = 3000;
21 }
22
23 void sub1() {
24 printf("sub1 pub %d pri %d pro %d\n", pub, pri, pro);
25 }
26 };
27
28 /*******************/
29 /* クラス Example2 */
30 /*******************/
31 class Example2 : public Example1 {
32
33 public :
34
35 Example2() {}
36
37 void sub2() {
38 printf("sub2 pub %d pro %d\n", pub, pro);
39 // printf("sub2 pri %d\n", pri); // 許されない
40 }
41 };
42
43 void sub();
44
45 /****************/
46 /* main program */
47 /****************/
48 int main()
49 {
50 // ブロック
51 int x = 10;
52 if (x > 5) {
53 printf("block x %d\n", x);
54 int x = 15;
55 int y = 20;
56 printf("block x %d\n", x);
57 printf("block y %d\n", y);
58 }
59 sub();
60 printf("x %d\n", x);
61 // int y = 100; // この文がなければ,y が未定義
62 // printf("y %d\n", y);
63 extern int z;
64 printf("z %d\n", z);
65 // クラス
66 Example2 ex = Example2();
67 ex.sub1();
68 ex.sub2();
69 printf("public member( pub ) %d\n", ex.pub);
70
71 return 0;
72 }
73
74 int z = 30;
75
76 /************/
77 /* 関数 sub */
78 /************/
79 void sub()
80 {
81 int x = 40;
82 printf(" sub x %d\n", x);
83 printf(" sub z %d\n", z);
84 }