C ++中带有类和对象的名称空间

时间:2018-09-08 09:34:48

标签: c++

#include <iostream>
#include <string>

using namespace std;
namespace string {

class string {

    string a;

    public: 
        string() {

            string ( const string *q ): a(*q) 

            { }


            string (string &r):a(r.a) 

            { }


            string (const std::string &_a):a(_a) 

            { }        


            ~demo ()  {

            }

            void show () {
               cout << a; 
            }   

            void change (const std::string &_a) {
               a = _a;
            }
        };
    }
}


using namespace string;
    int main () {

        demo s1;
        demo s2("Hello");
        demo s3(s2);                
        s1.show();
        s2.show();
        s3.show();
        s2.change("Java");
        s2.show();
        s3.show();
    }
  

所需的输出是Hello Hello Java Hello

我想定义一个名称空间,即字符串。并且在c ++中有一个头文件,即字符串都具有相同的名称

所以我该如何编码程序以避免c ++中这两个相同名称之间的名称冲突。

2 个答案:

答案 0 :(得分:2)

似乎您的教授希望您理解以下内容,

  1. 命名空间,它的目的是什么。
  2. 请勿污染您的名称空间。 (using namespace std;
  3. 不同类型的构造函数。

试图编译您的程序。不确定在遵循成功编译的解决方案后您的意图是否正确。检查一下。

#include <iostream>
#include <string>

// Do not pollute the global namespace with using namespace.
//using namespace std;
namespace string {

class string {

    std::string a; // Assume you need to store a string inside your class.

    public: 
        string() {};

        string (const std::string *q ) : a(*q) { }

        string (string &r):a(r.a) { }

        string (const std::string &_a):a(_a) { }        

        ~string()  {}

        void show () {
            std::cout << a; 
        }

        void change (const std::string &_a) {
        a = _a;
        }
    }; // ~class end
};   //~namespace end


int main () {

    // Use full namespace qualified ID everywhere
    string::string s1;
    string::string s2("Hello");
    string::string s3(s2);                
    s1.show();
    s2.show();
    s3.show();
    s2.change("Java");
    s2.show();
    s3.show();
}

请勿直接使用。学习以下内容。

    标头中的
  1. Namespace pollution-using namespace std不好。
  2. Purpose of namespaces

答案 1 :(得分:0)

  1. 对于类,函数和变量,避免使用过于string这样的通用名称。
  2. 包括标题时,请避免使用using namespace std。而是在需要时使用cout这样的名称空间的特定功能(例如std::cout)。