实现部分放在源文件.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---命名空间相关推荐

  1. php 的命名空间 看鸟哥后的随笔

    我以前貌似真心没有想过php的命名空间,我每次写文件都会记得不让类名相重, 看完命名空间了这个,我发现可以解决我的一部分问题 1 MyLove.php 2 namespace Zj; 3 class ...

  2. Jmeter_初步认识随笔

    Jmeter_初步认识随笔 1. 简介 Apache JMeter是100%纯java桌面应用程序,被设计用来测试客户端/服务器结构的软件(例如web应用程序).它可以用来测试包括基于静态和动态资源程 ...

  3. C#程序集Assembly学习随笔(第一版)_AX

    ①什么是程序集? 可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件. 嗯,这个确实简单了些,但我是这么理解的.详细: http://blog.csdn.net/sws83 ...

  4. 随笔 - C/C++

    随笔分类 - C/C++ C语言宏基础总结 摘要: 最近在做一些项目的时候,不小心把NDK下面的一些宏写得有问题,导致一些编译不过的问题.所以,总结一下. 这些知识都可以在 "GCC 文档& ...

  5. Vue笔记随笔---kalrry

    Vue笔记随笔---kalrry VUE vue框架的两大核心: 一.前端开发历史 二.MV*模式 库 VS 框架 MVC架构模式 MVP架构模式 MVVM架构模式 vue是MVVM 三.开发工具 四 ...

  6. 代码阅读总结之Fitch and Mather 7.0(资源文件Resource随笔)

    相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...

  7. html.action 访问分部视图,MVC+EF 随笔小计——分部视图(Partial View)及Html.Partial和Html.Action差异...

    Partial View指可以应用于View中以作为其中一部分的View的片段(类似于之前的user control), 可以像类一样,编写一次, 然后在其他View中被反复使用. 一般放在" ...

  8. React笔记随笔---kalrry

    React笔记随笔---kalrry React 一.React的简介 1.介绍 2.特点 3.框架对比 二.环境搭建 1.引入文件的方式 2.官方脚手架(模块化) 第三方脚手架 第一个React程序 ...

  9. OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)

    1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...

  10. 解读Python的命名空间

    前面我们理解了变量.函数的作用域,现在我们再深入讨论一下Python是如何给变量.函数划分作用域的. 我们在编写Python程序的过程中,如果要使用变量和函数,都需要先对变量和函数命名后才能使用.Py ...

最新文章

  1. 学精算的计算机知识,精算学专业学什么 附学习科目和课程
  2. 016 | 漫谈区块链共识机制
  3. P2831 愤怒的小鸟
  4. 网络布线,多图、有细节,【炮哥】讲诉,值得无经验午饭手抄
  5. java5年转c语言,时隔5年,C语言再次领先Java,荣登编程语言排行榜第一!
  6. 11 个 Nginx 参数性能优化工作
  7. 译 | 在 Azure SQL 上节约成本的八种方法
  8. C语言学习笔记-7.函数
  9. java图片转字符_java实现图片转字符图(看的过去的亚子)
  10. 【reproject_inter】fits头文件的映射(1,改变fits文件的数据范围,2,对坐标系进行投影转换)
  11. Quartus II cyclone 系列fpga程序下载到flash中
  12. UltraISO软碟通制作U盘时显示:请格式化U盘后再试。
  13. C++学习心得:引用的详解
  14. 【EOSIO】EOS/WAX签名错误 is_canonical( c ): signature is not canonical 问题
  15. java获取生僻字_生僻字与16进制的转换
  16. android 手机壁纸源码,Android设置手机壁纸-源码(WallPaper)
  17. OSI参考模型——数据链路层详解
  18. 微信小程序开发什么工具好?
  19. freemarker遍历list处理第一个、最后一个元素
  20. 第六章、支付结算业务的核算

热门文章

  1. 2021年大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作
  2. java线程触发_java线程
  3. adb: unable to connect for root: more than one device/emulator
  4. OverflowError: cannot fit ‘int‘ into an index-sized integer
  5. python 把一个字典赋值给一个空的字典,或者是列表赋值给一个空的列表显示黄色警告
  6. Ubuntu系统创建AndroidStudio启动图标(快捷方式)
  7. java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
  8. string判断是否是正常的ip格式
  9. Git 的简单使用及ssh配置问题-赖大大
  10. JDBC学习DayTwo