「第10章 名前空間」Win32コンソールアプリケーション版
<岡本安晴「大学生のための心理学VC++プログラミング入門」>の第10章のサンプルプログラムのWin32版をVisual C++2008で作成した。プログラムファイルは圧縮ファイルとしてまとめた。圧縮ファイルはクリックしてダウンロードしたものをマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選んで解凍することができる。解凍したプログラムファイルはVisual C++2010でも開くことができる。
リスト10.1-1のWin32版
圧縮ファイル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-3のWin32版
圧縮ファイル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-4のWin32版(ビルドが失敗する例)
圧縮ファイル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-5のWin32版
圧縮ファイル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.2のWin32版
圧縮ファイル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-1のWin32版
圧縮ファイル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-4のWin32版
圧縮ファイル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-5のWin32版
圧縮ファイル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-6のWin32版
圧縮ファイル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-9のWin32版
圧縮ファイル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-1のWin32版
圧縮ファイル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-2のWin32版
圧縮ファイル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-1のWin32版
圧縮ファイル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-2のWin32版
圧縮ファイル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-1のWin32版
圧縮ファイル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.7のWin32版
圧縮ファイル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;
}