程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++的名字空間

c++的名字空間

編輯:C++入門知識

1.在c++中, 名稱可以是變量、函數、結構體、枚舉、類以及類和結構體的成員。當項目越來越大時,名稱相互沖突的可能性也將增加。使用多個廠商的類庫時,可能導致名字沖突。例如,兩個庫可能都定義了名為List,Tree和Node的類,但定義的方式不兼容。用戶可能希望使用一個庫的List類,而使用另一個類庫的Tree類。這種沖突被稱為名字空間問題。

2.一個名字空間中的名稱不會與另外一個名字空間中的相同名稱沖突,同時允許程序的其他部分使用該名字空間中聲明的東西。

3.名字空間可以使全局的,也可以嵌套在其他的名字空間中,但是不能位於代碼塊中。

4.名字空間是開放的,即可以把名稱加入到名字空間中去。

namespace Jill 
{
     char * goose(const char *);
}
這樣就將goose加入到了名字空間Jill中。

5.盡量使用using聲明,少使用using編譯,即多使用名字空間中的部分名稱,盡量不要將名字空間中的全部名稱導入到程序中。

6.

#include 
using namespace std;
int main()
{
  ...
}
這個意思是,先將頭文件iostream放到名字空間std中,然後,using編譯指令是使該名字空間在文件下的函數中可用。

7.給名字空間取別名:

假設已有一個名字空間 namespace my_very_favorite_things {...}

則給這個名字空間取個別名mvft的方法: namespace mvft = my_very_favorite_things;

8.類似於math.h的頭文件時與c語言兼容的,沒有使用名字空間,但c++頭文件cmath是將各種數學庫函數放到名字空間std中。

9.名字空間實例:

以下程序由三個文件構成,一個頭文件,兩個源代碼文件:

文件結構:

\

namesp.h代碼:

#ifndef NAMESP_H_INCLUDED
#define NAMESP_H_INCLUDED
#include 
namespace pers
{
    struct Person
    {
        std::string fname;
        std::string lname;
    };
    void getPerson(Person &);
    void showPerson(const Person &);
}

namespace debts
{
    using namespace pers;
    struct Debt
    {
        Person name;
        double amount;
    };
    void getDebt(Debt &);
    void showDebt(const Debt &);
    double sumDebt(const Debt ar[], int n);
}


#endif // NAMESP_H_INCLUDED
namesp.cpp代碼:

#include 
#include "namesp.h"

namespace pers
{
    using std::cout;
    using std::cin;
    void getPerson(Person & per)
    {
        cout << "Enter first name: ";
        cin >> per.fname;
        cout << "Enter last name: ";
        cin >> per.lname;
    }

    void showPerson(const Person & per)
    {
        std::cout << per.lname << ", " << per.fname;
    }
}

namespace debts
{
    using std::cout;
    using std::cin;
    using std::endl;
    void getDebt(Debt & debt)
    {
        getPerson(debt.name);
        cout << "Enter debt: ";
        cin >> debt.amount;
    }

    void showDebt(const Debt & debt)
    {
        showPerson(debt.name);
        cout << ": $" << debt.amount << endl;
    }

    double sumDebt(const Debt ar[], int n)
    {
        double total = 0;
        for(int i = 0; i < n; i++)
            total += ar[i].amount;
        return total;
    }
}
namespp.cpp代碼:

#include 
#include "namesp.h"
using std::cin;
using std::cout;
using std::endl;

void other();

int main()
{
    using debts::Debt;
    using debts::showDebt;
    Debt debt = {{"zhang ", "fei"}, 2222.0};
    showDebt(debt);
    other();
    return 0;
}

void other()
{
    using std::cout;
    using std::cin;
    using namespace debts;
    Person pr = {"Doodles", "Glister"};
    showPerson(pr);
    cout << endl;
    Debt zippy[3];
    for(int i = 0; i < 3; i++)
        getDebt(zippy[i]);
    for(int i = 0; i < 3; i++)
        showDebt(zippy[i]);
    cout << "Total debts is " << sumDebt(zippy, 3) << endl;
}
程序輸出:







  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved