アフィリエイト広告を利用しています

広告

posted by fanblog

2017年10月12日

《その76》 ヘッダ と ソースファイル(p.337演習9-6)


ヘッダ

 複数のソースファイルで利用する変数や関数の宣言は、ヘッダに記述します。

--[ヘッダの例 sample.h]-----------
void function1(); // 関数の宣言
int function2(int x, int y); // 〃
int function3(); // 〃
extern int a1; // 変数 a1 の extern宣言
/*
extern宣言は『定義ではない宣言』で、
別の場所で定義されている 変数 a1 の利用を宣言しています。
*/
------------------------------------

※ オブジェクトや関数は、プログラムの中で一度だけ定義しなければならないから、
上のヘッダ sample.h で宣言している 変数や関数は、別ファイルのどこかで必ず一度だけ
定義されています。

※ ヘッダに記述するのは、外部結合をもつオブジェクトや関数です。



内部結合と外部結合

内部結合

オブジェクトや関数が、自身が宣言されたソースファイルでのみ通用する性質

[内部結合をもつもの]
static付きで定義されたオブジェクトや関数
例: static int a2;
static void function4();
インライン関数
constを付けて宣言された定値オブジェクト


外部結合

オブジェクトや関数が、自身が宣言されたソースファイルだけでなく、別のソースファイル
でも通用する性質

[外部結合をもつもの]
staticをつけずに定義された関数
関数の外で定義されたオブジェクト



新版明解C++入門編 p.337 演習9-6
 数当てゲーム第2版を以下のように変更したプログラムを作成せよ。
   当てるべき数を 0 〜 999 とする。
プレーヤが数値を入力できる回数を最大で 10回までに制限する。
入力ミスを行った( 0 〜 999 以外の数を入力した)場合は、回数としてカウントしない。
正解した場合は何回で正解したのかを表示し、最後まで正解しなかった場青は正解を表示する。

  4つのファイル kazuate.h
game.cpp
io.cpp
kazuate.cpp

を順に記述します。

// kazuate.h
void initialize();
void gen_no();
int judge(int cand);
int input();
int confirm_retry();

extern int max_no;
extern int kotae;



// game.cpp
#include <ctime>
#include <cstdlib>
#include "kazuate.h"
using namespace std;

int kotae = 0;

void initialize()
{
srand((unsigned int)time(NULL));
}

void gen_no()
{
kotae = rand() % (max_no + 1);
}

int judge(int cand)
{
if (cand == kotae)
return 0;
else if (cand > kotae)
return 1;
else
return 2;
}



// io.cpp
#include <iostream>
#include "kazuate.h"
using namespace std;

static void prompt()
{
cout << "0〜" << max_no << "の数:";
}

int input()
{
int val;
do {
prompt();
cin >> val;
} while (val < 0 || val > max_no);
return val;
}

int confirm_retry()
{
int cont;
cout << "もう一度しますか?\n"
<< "> cont;
if (cont)
cout << '\n';
return cont;
}



// kazuate.cpp
#include <iostream>
#include "kazuate.h"
using namespace std;

int max_no = 999;

int main()
{
initialize();
cout << "開始!\n";

do {
gen_no();
int hantei;
int chal_n;
for (chal_n = 1; chal_n <= 10; chal_n++) {
hantei = judge(input());
if (hantei == 1)
cout << "\aもっと小さい。\n";
else if (hantei == 2)
cout << "\aもっと大きい。\n";
else
break;
}
if (hantei == 0) cout << "正解! 挑戦回数 : " << chal_n << '\n';
else cout << "制限回数オーバー!! 正解は " << kotae << "でした" << '\n';
} while (confirm_retry());
}

◆ ビルド(B) → kazuateV2 のビルド(U)
c09pic10.png

◆ デバッグ(D) → デバッグなしで開始(H)
c09pic11.png

c09_0601.png

c09_0602.png

c09_0603.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6803955
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。