ネームスペースとは何だ?!
ハロー^^kyonです。
今日も少し勉強したよ^^
yoppa.org こちらのP137の勉強したメモです。
下記のコードが本文に記載されています。
#include <iostream> using namespace std; class Dog { // Dogクラスの定義 }; //Dogクラスの定義終了 (最後に";"が入るのに注意) int main (int argc, char * const argv[]) { //メイン関数 }
ここで疑問が
「using namespace std;」とは何だ?!
■using namespace std;
標準の関数がこの「std」というネームスペースの中にあり、コードの中で簡単に利用するために「using namespace std;」と記載する。
(標準の関数とは、例えば、上記のコードに記載されている<iostream>
のファイルの中にある「cout」や、vectorやmapなどがある)
#include <vector>
の場合も、ネームスペースはstdに設定されている。
そのため、「using namespace std;」を記載することにより「std::」の省略が可能になる。
具体的には下記の通りである。
using namespace std;を書かない場合
#include <iostream> std::cout << "Hello, world!" << std::endl;
using namespace std;を書いた場合
#include <iostream> using namespace std; cout << "Hello, world!" << endl;
このように「std::」を書く必要がなくなる。
で、そもそも
「ネームスペース」とは何か
C++では、例えば、複数のファイルに同じ名前の関数を記載する場合に、重複しないように名前をつけたネームスペースに入れる必要がある。
主にヘッダーファイルで利用する。
具体的にはこのようにかく
// 名前空間 seal を定義する namespace seal { // ここに宣言する int foo() { // int foo()の定義 .... } ... };
上記の書籍のP144のコードの場合
#include <iostream> using namespace std; class Dog { // Dogクラスの定義 public: string name; //犬の名前 (状態) void bark(); //犬が吠える (動作) }; //Dogクラスの定義終了 (最後に";"が入るのに注意)
は重複しない場合はこのままで良いが、
#include <iostream> using namespace std; namespace animals{ class Dog { // Dogクラスの定義 public: string name; //犬の名前 (状態) void bark(); //犬が吠える (動作) }; //Dogクラスの定義終了 (最後に";"が入るのに注意) }
とかいたら他のファイルでも違うネームスペースでclass Dogを記載することができる。
ちなみに、呼び出す場合は
animals::Dog dog; dog.bark();
または、
using namespace animals; Dog dog; dog.bark();
ちなみに、pyrhonの場合はファイルがそのままnamespaceになるから、自分で定義する必要がない。
namespace
を参考に勉強させていただきました^^
またねーーー♡