Up

「第10章 名前空間」Win32コンソールアプリケーション版

 

 <岡本安晴「大学生のための心理学VC++プログラミング入門」>の第10章のサンプルプログラムのWin32版をVisual C++2008で作成した。プログラムファイルは圧縮ファイルとしてまとめた。圧縮ファイルはクリックしてダウンロードしたものをマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選んで解凍することができる。解凍したプログラムファイルはVisual C++2010でも開くことができる。


リスト10.1-1Win32

圧縮ファイルsample10_1_1win32.zip

==============================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

int calcSum( int a, int b ){

                return a + b;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

        int a, b;

        cout << "a = ";

        cin >> a;

        cout << "b = ";

        cin >> b;

        cout << "sum = " << calcSum( a, b ) << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

 


リスト10.1-3Win32

圧縮ファイルsample10_1_3win32.zip

================== メイン・ソース・ファイル =====================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

#include "myLib.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

        int a, b;

        cout << "a = ";

        cin >> a;

        cout << "b = ";

        cin >> b;

        cout << "sum = " << calcSum( a, b ) << endl;

 

        cout << endl <<"何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

================= ヘッダーファイル myLib.h ============================

int calcSum( int a, int b ){

                return a + b;

}

 


リスト10.1-4Win32版(ビルドが失敗する例)

圧縮ファイルsample10_1_4win32.zip

==================== メイン・ソース・ファイル ===========================

#include "stdafx.h"

#include <iostream>

 

#include "myLib.h"

#include "mylib.h"

 

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

        int a, b;

        cout << "a = ";

        cin >> a;

        cout << "b = ";

        cin >> b;

        cout << "sum = " << calcSum( a, b ) << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

==================== ヘッダー・ファイル myLib.h  ===========================

int calcSum( int a, int b ){

                return a + b;

}

 


リスト10.1-5Win32

圧縮ファイルsample10_1_5win32.zip

==================== メイン・ソース・ファイル =============================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

#include "myLib.h"

#include "mylib.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

        int a, b;

        cout << "a = ";

        cin >> a;

        cout << "b = ";

        cin >> b;

        cout << "sum = " << calcSum( a, b ) << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

==================== ヘッダー・ファイル myLib.h =============================

#ifndef CK_MYLIB

#define CK_MYLIB

 

int calcSum( int a, int b ){

                return a + b;

}

 

#endif

 


リスト10.2Win32

圧縮ファイルsample10_2win32.zip

==================== メイン・ソース・ファイル ================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

#include "myLib.h"

#include "mylib.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

        int a, b;

        cout << "a = ";

        cin >> a;

        cout << "b = ";

        cin >> b;

        cout << "sum = " << calcSum( a, b ) << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

==================== ヘッダー・ファイル myLib.h ====================================

#ifndef CK_MYLIB

#define CK_MYLIB

 

int calcSum( int a, int b );

 

#endif

==================== ソース・ファイル myLib.cpp ===================================

#include "stdafx.h"

 

int calcSum( int a, int b ){

                return a + b;

}

 


リスト10.3-1Win32

圧縮ファイルsample10_3_1win32.zip

==================== メイン・ソース・ファイル ======================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

#include "myModule.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

        int a = 1, b = 20;

        cout << "a = " << a << "   b = " << b << endl;

        cout << "twice(a) = " << name1::twice(a) << endl;

        cout << "sumTwice(a,b) = " << name1::name2::sumTwice(a, b) << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

===================== ヘッダー・ファイル myModule.h ====================================

namespace name1 {

 

        int twice( int );

 

        namespace name2 {

               

                int sumTwice( int, int );

 

        }

}

===================== ソース・ファイル myModule.cpp =====================================

#include "stdafx.h"   //  Visual C++の場合に必要

 

namespace name1 {

 

        int twice( int a ){

                return 2 * a;

        }

 

        namespace name2 {

 

                int sumTwice( int a, int b ){

                        return twice(a) + twice(b);

                }

 

        }

}

 


リスト10.3-4Win32

圧縮ファイルsample10_3_4win32.zip

==================== メイン・ソース・ファイル ====================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

#include "myModule.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

        int a = 1, b = 20;

        cout << "a = " << a << "   b = " << b << endl;

 

        using name1::twice;

 

        cout << "twice(a) = " << twice(a) << endl;

 

        using name1::name2::sumTwice;

 

        cout << "sumTwice(a,b) = " << sumTwice(a, b) << endl;

 

        cout << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

===================== ヘッダー・ファイル myModule.h ===================================

namespace name1 {

 

        int twice( int );

 

        namespace name2 {

               

                int sumTwice( int, int );

 

        }

}

===================== ソース・ファイル myModule.cpp ===========================================

#include "stdafx.h"

 

namespace name1 {

 

        int twice( int a ){

                return 2 * a;

        }

 

        namespace name2 {

 

                int sumTwice( int a, int b ){

                        return twice(a) + twice(b);

                }

 

        }

}


リスト10.3-5Win32

圧縮ファイルsample10_3_5win32.zip

==================== メイン・ソース・ファイル ========================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

#include "myModule.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

        int a = 1, b = 20;

        cout << "a = " << a << "   b = " << b << endl;

 

        using namespace name1;

 

        cout << "twice(a) = " << twice(a) << endl;

 

        using namespace name1::name2;

 

        cout << "sumTwice(a,b) = " << sumTwice(a, b) << endl;

 

        cout << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

==================== ヘッダー・ファイル myModule.h ======================================

namespace name1 {

 

        int twice( int );

 

        namespace name2 {

               

                int sumTwice( int, int );

 

        }

}

==================== ソース・ファイル myModule.cpp =======================================

#include "stdafx.h"

 

namespace name1 {

 

        int twice( int a ){

                return 2 * a;

        }

 

        namespace name2 {

 

                int sumTwice( int a, int b ){

                        return twice(a) + twice(b);

                }

 

        }

}

 


リスト10.3-6Win32

圧縮ファイルsample10_3_6win32.zip

====================== メイン・ソース・ファイル ========================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

#include "module1.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

        extern int data;

        data = 2;

//      myetc::setData( 2 );

        using std::cout;

        using std::endl;

        cout << "getData = " << myetc::getData() << endl;

        myetc::setData( 5 );

        cout << "getData = " << myetc::getData() << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

====================== ヘッダー・ファイル module1.h ======================================

namespace myetc {

        void setData( int v );

        int getData( );

}

====================== ソース・ファイル module1.cpp ======================================

#include "stdafx.h"

 

//namespace {

        int data;

//}

 

namespace myetc {

        void setData( int v ){

                        data = v;

                        return;

        }

        int getData( ){

                        return data;

        }

}

 


リスト10.3-9Win32

圧縮ファイルsample10_3_9win32.zip

========================================================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

        int a;

 

        namespace myspace{

                int a;

        }

 

int _tmain(int argc, _TCHAR* argv[])

{

        myspace::a = 1;

        a = 2;

        cout << "myspace::a = " << myspace::a << "   a = " << a << endl;

        using myspace::a;

        myspace::a = 3;

        a = 4;

        cout << "myspace::a = " << myspace::a << "   a = " << a << endl;

        ::a = 5;

        cout << "a = " << a << "   ::a = " << ::a << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

 


リスト10.4-1Win32

圧縮ファイルsample10_4_1win32.zip

=============================================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

int a;   //  大域スコープ

 

int _tmain(int argc, _TCHAR* argv[])

{

        a = 1;

        cout << "@1...a = " << a << endl;

        int a;  //  ブロック内定義ーその1

        a = 2;

        cout << "@2...a = " << a << "   ::a = " << ::a << endl;

        {

                int a;   //  ブロック内定義ーその2

                a = 3;

                cout << "@3...a = " << a << "   ::a = " << ::a << endl;

        }

        cout << "@4...a = " << a << "   ::a = " << ::a << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

 


リスト10.4-2Win32

圧縮ファイルsample10_4_2win32.zip

===============================================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

namespace ns {

        int data;

}

 

namespace ns {

        void setData( int v ){

                        data = v;

        }

        int getData( ){

                        return data;

        }

}

 

int _tmain(int argc, _TCHAR* argv[])

{

        using namespace ns;

        setData(1);

        cout << "data = " << getData() << endl;

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

 


リスト10.5-1Win32

圧縮ファイルsample10_5_1win32.zip

==========================================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

int g = 0;

 

void check( int i ){

        int a = 0;

        static int b = 0;

        cout << "i = " << i << endl;

        cout << "a = " << a << "   b = " << b << endl;

        {

                int a = 10 + i;

                cout << "a = " << a << "   b = " << b << endl;

        }

        cout << "a = " << a << "   b = " << b << endl;

        cout << "++a = " << ++a << "   ++b = " << ++b << endl;

        return;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

        for (int i = 0; i < 3; i++)     check( i );

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

 


リスト10.5-2Win32

圧縮ファイルsample10_5_2win32.zip

=============================================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

        char * c;

        cout << "何か文字を入力してください@1" << endl;

        char ck;

        cin >> ck;

        c = new char[500000000];

        cout << "何か文字を入力してください@2" << endl;

        cin >> ck;

        delete [] c;

        cout << "何か文字を入力してください@3" << endl;

        cin >> ck;

        c = new char[500000000];

        cout << "何か文字を入力してください@4" << endl;

        cin >> ck;

        return 0;

}

 


リスト10.6-1Win32

圧縮ファイルsample10_6_1win32.zip

==============================================================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

class staticMem {

        public:

                static int data;

                static void count(){

                        data++;

                }

                static void check(){

                        cout << "static check is called...data = " << data << endl;

                }

};

 

int staticMem::data = 0;

 

int _tmain(int argc, _TCHAR* argv[])

{

        for (int i = 0; i < 3; i++){

                staticMem::count();

                staticMem::check();

        }

 

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

 


リスト10.7Win32

圧縮ファイルsample10_7win32.zip

=================== メイン・ソース・ファイル =============================

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

#include "unit1.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

        check1(0);

        check1(1);

        check1(0);

       

        cout << endl << "何か文字を入力して終了。" << endl;

        char ck;

        cin >> ck;

        return 0;

}

==================== ヘッダー・ファイル unit.h ==============================

#ifndef CK_UNIT1

#define CK_UNIT1

 

void check1(int);

 

#endif

==================== ソース・ファイル unit1.cpp ==============================

#include "stdafx.h"

#include "unit1.h"

//#include "unit2.h"

 

extern void check2(int);  //  #include "unit2.h"に対しては不要。

 

//    外部リンケージ

void check1( int i ){

                check2( i );

                return;

}

=================== ヘッダー・ファイル unit2.h ================================

#ifndef CK_UNIT2

#define CK_UNIT2

 

void check2( int i);

 

#endif

=================== ソース・ファイル unit2.cpp ================================

#include "stdafx.h"

#include <iostream>

#include "unit2.h"

 

using namespace std;

 

static void check3();  // check2で呼び出すため

 

static int gcount = 0;  //  内部リンケージ

 

//    外部リンケージ

void check2( int i){

        static int count = 0;  //  no linkage

        if (i == 0){

                        cout << "i == 0" << endl;

                        gcount += 100;

                        static int zero_count = 0;  //  no linkage

                        zero_count++;

                        cout << "zero_count = " << zero_count << endl;

        }else{

                        check3();

                        gcount += 10000;

        }

        cout << "count = " << ++count

                << "   gcount = " << gcount << endl;

        return;

}

 

//    内部リンケージ

static void check3(){

                        cout << "check3 is called." << endl;

}

 


 

第9章用のWin32版サンプルプログラム

 

Up