一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

命名空间其实就是由用户定义的范围,同一个命名空间里的东西只要在这个命名空间里具有独一无二的名字就行了。

例如:

 1 namespace author
 2 
 3 {
 4 
 5 std::string person;
 6 
 7 }
 8 
 9 namespace programmer
10 
11 {
12 
13 std::string person;
14 
15 }

两者由于在不同的命名空间,所以并不会出现冲突。

用一个using指令可以把特定命名从命名空间提取到全局作用域:

1 using std::cout;
2 
3 cout << "Hello World!!\n";

using指令的出现决定着从命名空间里提取出来的东西能在哪个作用域内使用。如果把它放在某个函数声明的前面,他将拥有全局性;如果把他放在某个函数里,他将只在这一个函数里可以使用。

实例:

  1 Rational.h文件:
  2 
  3 //Ration.h
  4 //Create by 亦我飞也 
  5 
  6 //这个头文件用来声明有理数类(Rational class) 
  7 //类里面对四则运算进行重载,以实现分数运算
  8 
  9 //如果RATIONAL_H未被定义,则定义rational.h,执行定义类程序 
 10 //如果RATIONAL_H已经被定义,程序则直接跳到endif(即定义类程序只会执行一次) 
 11 #ifndef RATIONAL_H//如果没有定义rational.h
 12 
 13 #define RATIONAL_H//定义rational.h 
 14  
 15 #include <iostream> 
 16 
 17 namespace myMath
 18 {
 19         class Rational//定义基类
 20     {
 21     public:
 22         Rational(int num,int denom); //构造器 num = 分子,denom = 分母 
 23         
 24         Rational operator+(Rational rhs);// rhs == right hand side(右手边参数) 
 25         Rational operator-(Rational rhs);
 26         Rational operator*(Rational rhs);
 27         Rational operator/(Rational rhs);
 28         
 29     private:
 30         void normalize();//负责对分数的简化处理
 31         
 32         int numerator; //分子
 33         int denominator; //分母 
 34         
 35         friend std::ostream& operator<<(std::ostream& os,Rational f);//传递给它的是哪一个流,它返回的就是那个流的一个引用
 36     }; 
 37     
 38     void call_love_fishc();//输出爱心
 39 } 
 40 
 41 
 42 #endif//如果已经定义rational.h,则结束 
 43  
 44 
 45 Rational.cpp文件
 46 
 47 #include <iostream>
 48 #include <string>
 49 #include <math.h> 
 50 #include "Rational.h"//系统级别用单尖括号,自定义级别用双引号 
 51 
 52 using namespace std;
 53 namespace myMath
 54 {
 55         Rational::Rational(int num,int denom)//构造函数实现 
 56     {
 57         numerator = num;
 58         denominator = denom;
 59         
 60         normalize(); 
 61     } 
 62     //normalize()对分数进行简化操作包括:
 63     //1.只允许分子为负数,如果分母为负数则把负数挪到分子部分,如1/-2==-1/2 
 64     //2.利用欧几里德算法(辗转求余原理)将分数进行简化:2/10 => 1/5 
 65     
 66     void Rational::normalize()
 67     {
 68         //确保分母为正
 69         if( denominator < 0) 
 70         {
 71             numerator = -numerator;
 72             denominator = -denominator;
 73         }
 74         //欧几里德算法 
 75         int a = abs(numerator);
 76         int b = abs(denominator);
 77         
 78         //求出最大公约数
 79         while(b>0)
 80         {
 81             int t = a % b;//取余 
 82             a = b;
 83             b = t;
 84         }
 85          
 86          //分子、分母分别除以最大公约数得到最简化分数
 87          numerator /= a;
 88          denominator /= a; 
 89     }
 90     //a   c   a*d   c*b   a*d + c*d
 91     //- + - = --- + --- = ----------
 92     //b   d   b*d   b*d      b*d
 93     Rational Rational::operator+(Rational rhs)//分数的加运算 
 94     {
 95         int a = numerator;
 96         int b = denominator;
 97         int c = rhs.numerator;
 98         int d = rhs.denominator;
 99         
100         int e = a*b + c*d;
101         int f = b*d;
102         
103         return Rational(e,f);
104     }
105     //a   c   a   -c
106     //- - - = - + -- 
107     //b   d   b   d 
108     Rational Rational::operator-(Rational rhs)//分数的减运算 
109     {
110         rhs.numerator = -rhs.numerator; //被减数分子取负数 
111         return operator+(rhs);
112     }
113     //a   c   a*c
114     //- * - = --- 
115     //b   d   b*d 
116     Rational Rational::operator*(Rational rhs)//分数的乘运算
117     {
118         int a = numerator;
119         int b = denominator;
120         int c = rhs.numerator;
121         int d = rhs.denominator;
122         
123         int e = a*c;
124         int f = b*d;
125         
126         return Rational(e,f);
127     }
128     //a   c   a   d
129     //- / - = - * - 
130     //b   d   b   c
131     Rational Rational::operator/(Rational rhs)//分数的除运算
132     {
133         //rhs的分子分母互换 
134         int t = rhs.numerator;
135         rhs.numerator = rhs.denominator;
136         rhs.denominator = t;
137         
138         return operator*(rhs);
139     }
140     
141     ostream& operator<<(ostream& os,Rational f)//并不属于Rational类,是一个独立的函数 
142     {
143         if(f.numerator % f.denominator == 0)
144         os << f.numerator / f.denominator;
145         else 
146         os << f.numerator << "/" << f.denominator;//打印分数 
147         return os; 
148     }
149     
150     void call_love_fishc()//输出爱心 
151     {
152         int i,j;
153         int n = 10;
154         
155         for(i=1-(n>>1);i<=n;i++)//>>右移,右移一位除以2,左移一位乘以2 
156         {
157             cout << "Hello World!"; 
158                 if(i>=0)
159             {
160                 for(j=0;j<i;j++)
161                 cout << "  ";
162                 for(j=1;j<=2*(n-i)+1;j++)
163                 cout << " *";
164                 cout << endl; 
165             }
166             else
167             {
168                 for(j=i;j<0;j++)
169                 cout << "  ";
170                 for(j=1;j<=n+2*i+1;j++)
171                 cout << " *";
172                 for(j=1;j<=-1-2*i;j++)
173                 cout << "  ";
174                 for(j=1;j<=n+2*i+1;j++)
175                 cout << " *";
176                 cout << endl;
177             }
178         }
179         
180     }
181 
182     
183 }
184 
185 
186 main.cpp文件:
187 
188 #include <iostream>
189 #include "Rational.h"//系统级别用单尖括号,自定义级别用双引号 
190 #include <string>
191 #include <math.h> 
192 //using指令的出现决定着从命名空间里提取出来的东西能在哪个作用域内使用。
193 //如果把它放在某个函数声明的前面,他将拥有全局性;如果把他放在某个函数里,他将只在这一个函数里可以使用。
194 using namespace std;
195 using namespace myMath;//声明命名空间myMath 
196 
197 int main()
198 {
199     call_love_fishc();//输出爱心 
200      
201     Rational f1(2,16);//定义f1对象,且传入(2,16)参数 
202     Rational f2(7,8);//或者使用myMath::Rational f2(7,8); 
203     
204     //测试有理数加法运算 
205     cout << f1 << " + " << f2 << " == " << (f1+f2) << "\n"; // 左移操作符<<已经被重载了 
206     
207     //测试有理数减法运算 
208      cout << f1 << " - " << f2 << " == " << (f1-f2) << "\n"; //<< f1中由于f1属于Rational类型,将自动转到打印分数形式输出 
209     
210     //测试有理数乘法运算 
211      cout << f1 << " * " << f2 << " == " << (f1*f2) << "\n";//<< "+"中由于<<后面参数是字符串,所以使用系统默认的打印 
212     
213     //测试有理数除法运算 
214     cout << f1 << " / " << f2 << " == " << (f1/f2) << "\n";
215     
216     return 0;
217 }
posted on 2023-08-18 15:33  一杯清酒邀明月  阅读(42)  评论(0编辑  收藏  举报