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 }
block x 10 block x 15 block y 20 sub x 40 sub z 30 x 10 z 30
sub1 pub 1000 pri 2000 pro 3000 sub2 pub 1000 pro 3000 public member( pub ) 1000