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>//需要引进来一个头文件,因为下边用到了std

namespace 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把他给固定住。

猜你喜欢

转载自blog.csdn.net/m0_37957160/article/details/109047187
今日推荐