C++:随笔8---命名空间
??
??
實現部分放在源文件.cpp里面。
模塊化實例:
頭文件(里邊是函數和類的聲明)
//Rational.h頭文件的名稱
//Create by Yuan創建者名字
//頭文件作用:這個頭文件聲明了有理數類(Rational class)
//類里對四則運算進行重數,以實現分數運算#include<iostream>//需要引進來一個頭文件,因為下邊用到了std
class Rational
{public:Rational(int num,int dencm);//num=分子;dencm=分母;Rational operator+(Rational rhs);//rhs **Rational operator-(Rational rhs);Rational operator*(Rational rhs)Rational operator/(Rational rhs)private:void normalize();//負責對分數的簡化處理int numerator;//分子int dencminator;//分母friend std::ostream& operator<<(std::ostream& os,Rational f);
};
??
??win下是.\\。Linux下是./。
?
??
源文件:Rational.cpp
#include"Rational.h"
#include<iostream>
#include<stdlib.h>Rational::Rational(int num,int dencm)//頭文件聲明中的定義
{numerator=num;dencminator=dencm;normalize();
}
//normalize()//對分數進行簡化操作包括:
//1.只允許分子為負數,如果分母為負數則把負數挪到分子部分,如1/-2=-1/2
//2.利用歐幾里得算法(輾轉求余原理將分數進行簡化;2/10=>1/5)
void Rational::normalize()
{//確保分母為正if(dencminator<0){numerator=- numerator; dencminator=-dencminator;}
}
主函數:main.cpp
#include"Rational.h"
#include<iostream>int main()
{Rational f1(2,14);Rational f2(7,8);//測試有理數加法運算std::cout<<f1<<"+"<<f2<<"=="<<(f1+f2)<<"\n";//測試有理數減法運算std::cout<<f1<<"-"<<f2<<"=="<<(f1-f2)<<"\n";//測試有理數乘法運算std::cout<<f1<<"*"<<f2<<"=="<<(f1*f2)<<"\n";//測試有理數除法運算std::cout<<f1<<"/"<<f2<<"=="<<(f1/f2)<<"\n";return 0;}
?
??
所以把上邊頭文件進行修改:
//Rational.h頭文件的名稱
//Create by Yuan創建者名字
//頭文件作用:這個頭文件聲明了有理數類(Rational class)
//類里對四則運算進行重數,以實現分數運算#ifndef RATIONAL_H
#define RATIONAL_H
#include<iostream>//需要引進來一個頭文件,因為下邊用到了std
class Rational
{public:Rational(int num,int dencm);//num=分子;dencm=分母;Rational operator+(Rational rhs);//rhs **Rational operator-(Rational rhs);Rational operator*(Rational rhs)Rational operator/(Rational rhs)private:void normalize();//負責對分數的簡化處理int numerator;//分子int dencminator;//分母friend std::ostream& operator<<(std::ostream& os,Rational f);
};
#endif
從上邊的Rational.cpp頭文件和主函數main.cpp都引用了頭文件Rational.h。同時引用的過程我們在main函數第一次編譯的時候他已經引用他了(第一次執行Rational.h會被編譯,他肯定還沒有定義RATIONAL_H這個常量,那我們就定義它并執行以下的內容,知道#endif);再來到Rational.cpp的時候他也引用了Rational.h這個頭文件,就又進入這個頭文件,這個時候RATIONAL_H這個常量已經被定義過了,下邊的內容就都不會被執行了,直接來到#endif的地方。
??
?
把上述Rational這個類修改成在自己的命名空間下:
//Rational.h頭文件的名稱
//Create by Yuan創建者名字
//頭文件作用:這個頭文件聲明了有理數類(Rational class)
//類里對四則運算進行重數,以實現分數運算#ifndef RATIONAL_H
#define RATIONAL_H
#include<iostream>//需要引進來一個頭文件,因為下邊用到了stdnamespace Mymath
{
class Rational
{public:Rational(int num,int dencm);//num=分子;dencm=分母;Rational operator+(Rational rhs);//rhs **Rational operator-(Rational rhs);Rational operator*(Rational rhs)Rational operator/(Rational rhs)private:void normalize();//負責對分數的簡化處理int numerator;//分子int dencminator;//分母friend std::ostream& operator<<(std::ostream& os,Rational f);
};
}
#endif
那么在Rational.cpp和main.cpp就引用不到了,就需要在這Rational.cpp(在這個文件中是對他的使用)文件中也要使用命名空間把他們括起來(就是把聲明和定義把他括起來),那么在main函數中是調用他的,那我們就可以使用using namespace Mymath;或者每次使用都是用Mymath::這樣的方式。
-----------鏈接和作用域
翻譯單元就是把源文件編譯之后的東西叫做翻譯單元。
??
??
??
???
在函數里定義的變量只存在于該函數的內部,根本沒有任何鏈接。
(1)static是靜態成員他是存放在他自己的源文件里邊,他不會被其他源文件動搖。
(2)由于使用了extern,所以這里可以把thatNum給整過來(因為thatNum是在that.cpp中中聲明的全局變量嘛,所以使用了extern把他給拉過來了)。
(3)不要在頭文件里邊定義變量,生命就行了。如果我們非要定義的話就把他聲明為static類型(就意味著這個變量只有內鏈接,只存在this.cpp這個翻譯單元里邊),我們還不想讓它改變就用const把他給固定住。
?
總結
以上是生活随笔為你收集整理的C++:随笔8---命名空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++:随笔6---new\delete
- 下一篇: C++:随笔9----模板/内联函数/容