2017年10月13日
《その77》 名前空間(p.343演習9-7,演習9-8,演習9-9)
関数やオブジェクトに内部結合を与えるには、
T) 識別子に static を付ける。
static int a1;
U) 名前無し空間に所属するものとして定義する。
namespace {
int a1;
}
といった方法がありますが、C++ では、Uの方法が推奨されています。
新版明解C++入門編 p.343 演習9-7
名前空間 Japanese の中に大阪弁を表す名前空間 Osaka を List 9-15(p.339)に追加したプログラムを作成せよ。追加した名前空間の中に、『変数 x の値は 1 でっせ。』と表示する関数 print_x と、『もうかってまっか?』と表示する関数 hello を定義すること(変数 x は定義しない)。
// p343_演習9-7
#include <iostream>
using namespace std;
namespace English {
int x = 1;
void print_x() {
cout << "The value of x is " << x << ".\n";
}
void hello() {
cout << "Hello!\n";
}
}
namespace Japanese {
int x = 2;
void print_x() {
cout << "変数xの値は" << x << "です。\n";
}
void hello() {
cout << "こんにちは!\n";
}
namespace Osaka {
int x = 3;
void print_x() {
cout << "変数xの値は" << x << "でっせ。\n";
}
void hello() {
cout << "もうかってまっか!\n";
}
}
}
int main()
{
cout << "English::x = " << English::x << '\n';
English::print_x();
English::hello();
cout << "Japanese::x = " << Japanese::x << '\n';
Japanese::print_x();
Japanese::hello();
cout << "Japanese::Osaka::x = " << Japanese::Osaka::x << '\n';
Japanese::Osaka::print_x();
Japanese::Osaka::hello();
}
新版明解C++入門編 p.343 演習9-8
前問を、名前空間メンバの宣言と定義を分離したプログラムとして作成せよ。
// p343_演習9-8
#include <iostream>
using namespace std;
namespace English {
extern int x;
void print_x();
void hello();
}
namespace Japanese {
extern int x;
void print_x();
void hello();
namespace Osaka {
extern int x;
void print_x();
void hello();
}
}
int English::x = 1;
void English::print_x() {
cout << "The value of x is " << x << ".\n";
}
void English::hello() {
cout << "Hello!\n";
}
int Japanese::x = 2;
void Japanese::print_x() {
cout << "変数xの値は" << x << "です。\n";
}
void Japanese::hello() {
cout << "こんにちは!\n";
}
int Japanese::Osaka::x = 3;
void Japanese::Osaka::print_x() {
cout << "変数xの値は" << x << "でっせ。\n";
}
void Japanese::Osaka::hello() {
cout << "もうかってまっか!\n";
}
int main() {
cout << "English::x = " << English::x << '\n';
English::print_x();
English::hello();
cout << "Japanese::x = " << Japanese::x << '\n';
Japanese::print_x();
Japanese::hello();
cout << "Japanese::Osaka::x = " << Japanese::Osaka::x << '\n';
Japanese::Osaka::print_x();
Japanese::Osaka::hello();
}
新版明解C++入門編 p.343 演習9-9
演習9-6(p.337)(本ブログ《その76》)中の内部結合をもつ識別子を、名前無し名前空間に属するように変更したプログラムを作成せよ。
ソースプログラム io.cpp の中の
static void prompt()
{
cout << "0〜" << max_no << "の数:";
}
の定義を、次のように、関数 prompt が名前無し空間に所属するものとして定義する形に変更する。
namespace {
void prompt()
{
cout << "0〜" << max_no << "の数:";
}
}
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6806500
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック