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

模块化:把程序划分成多个组成部分(即所谓的模块)。这是通过把程序代码分散到多个文件里,等编译程序时再把那些文件重新组合在一起实现的。

C++预处理器的#include指令提供了一种能够让编译器在编译主程序时把其他文件的内容包括进来的机制。例如用这个指令来包括iostream头文件。

实例:头文件应用

  1 Rational.h文件
  2 
  3 //Ration.h
  4 //Create by 亦我飞也 
  5 
  6 //这个头文件用来声明有理数类(Rational class) 
  7 //类里面对四则运算进行重载,以实现分数运算
  8 
  9 #include <iostream> 
 10 
 11 class Rational//定义基类
 12 {
 13 public:
 14     Rational(int num,int denom); //构造器 num = 分子,denom = 分母 
 15     
 16     Rational operator+(Rational rhs);// rhs == right hand side(右手边参数) 
 17     Rational operator-(Rational rhs);
 18     Rational operator*(Rational rhs);
 19     Rational operator/(Rational rhs);
 20     
 21 private:
 22     void normalize();//负责对分数的简化处理
 23     
 24     int numerator; //分子
 25     int denominator; //分母 
 26     
 27     friend std::ostream& operator<<(std::ostream& os,Rational f);//传递给它的是哪一个流,它返回的就是那个流的一个引用
 28 }; 
 29 Rational.cpp文件
 30 
 31 #include <iostream>
 32 #include <string>
 33 #include <math.h> 
 34 #include "Rational.h"//系统级别用单尖括号,自定义级别用双引号 
 35 
 36 using namespace std;
 37 //class Rational//定义基类
 38 //{
 39 //public:
 40 //    Rational(int num,int denom); //构造器 num = 分子,denom = 分母 
 41 //    
 42 //    Rational operator+(Rational rhs);// rhs == right hand side(右手边参数) 
 43 //    Rational operator-(Rational rhs);
 44 //    Rational operator*(Rational rhs);
 45 //    Rational operator/(Rational rhs);
 46 //    
 47 //private:
 48 //    void normalize();//负责对分数的简化处理
 49 //    
 50 //    int numerator; //分子
 51 //    int denominator; //分母 
 52 //    
 53 //    friend ostream& operator<<(ostream& os,Rational f);//传递给它的是哪一个流,它返回的就是那个流的一个引用
 54 //}; 
 55 
 56 Rational::Rational(int num,int denom)//构造函数实现 
 57 {
 58     numerator = num;
 59     denominator = denom;
 60     
 61     normalize(); 
 62 } 
 63 //normalize()对分数进行简化操作包括:
 64 //1.只允许分子为负数,如果分母为负数则把负数挪到分子部分,如1/-2==-1/2 
 65 //2.利用欧几里德算法(辗转求余原理)将分数进行简化:2/10 => 1/5 
 66 
 67 void Rational::normalize()
 68 {
 69     //确保分母为正
 70     if( denominator < 0) 
 71     {
 72         numerator = -numerator;
 73         denominator = -denominator;
 74     }
 75     //欧几里德算法 
 76     int a = abs(numerator);
 77     int b = abs(denominator);
 78     
 79     //求出最大公约数
 80     while(b>0)
 81     {
 82         int t = a % b;//取余 
 83         a = b;
 84         b = t;
 85     }
 86      
 87      //分子、分母分别除以最大公约数得到最简化分数
 88      numerator /= a;
 89      denominator /= a; 
 90 }
 91 //a   c   a*d   c*b   a*d + c*d
 92 //- + - = --- + --- = ----------
 93 //b   d   b*d   b*d      b*d
 94 Rational Rational::operator+(Rational rhs)//分数的加运算 
 95 {
 96     int a = numerator;
 97     int b = denominator;
 98     int c = rhs.numerator;
 99     int d = rhs.denominator;
100     
101     int e = a*b + c*d;
102     int f = b*d;
103     
104     return Rational(e,f);
105 }
106 //a   c   a   -c
107 //- - - = - + -- 
108 //b   d   b   d 
109 Rational Rational::operator-(Rational rhs)//分数的减运算 
110 {
111     rhs.numerator = -rhs.numerator; //被减数分子取负数 
112     return operator+(rhs);
113 }
114 //a   c   a*c
115 //- * - = --- 
116 //b   d   b*d 
117 Rational Rational::operator*(Rational rhs)//分数的乘运算
118 {
119     int a = numerator;
120     int b = denominator;
121     int c = rhs.numerator;
122     int d = rhs.denominator;
123     
124     int e = a*c;
125     int f = b*d;
126     
127     return Rational(e,f);
128 }
129 //a   c   a   d
130 //- / - = - * - 
131 //b   d   b   c
132 Rational Rational::operator/(Rational rhs)//分数的除运算
133 {
134     //rhs的分子分母互换 
135     int t = rhs.numerator;
136     rhs.numerator = rhs.denominator;
137     rhs.denominator = t;
138     
139     return operator*(rhs);
140 }
141 
142 ostream& operator<<(ostream& os,Rational f);//函数声明 
143 
144 int main()
145 {
146     Rational f1(2,16);//定义f1对象,且传入(2,16)参数 
147     Rational f2(7,8);
148     
149     //测试有理数加法运算 
150     cout << f1 << " + " << f2 << " == " << (f1+f2) << "\n"; // 左移操作符<<已经被重载了 
151     
152     //测试有理数减法运算 
153      cout << f1 << " - " << f2 << " == " << (f1-f2) << "\n"; //<< f1中由于f1属于Rational类型,将自动转到打印分数形式输出 
154     
155     //测试有理数乘法运算 
156      cout << f1 << " * " << f2 << " == " << (f1*f2) << "\n";//<< "+"中由于<<后面参数是字符串,所以使用系统默认的打印 
157     
158     //测试有理数除法运算 
159     cout << f1 << " / " << f2 << " == " << (f1/f2) << "\n"; 
160     
161     return 0;
162 }
163 ostream& operator<<(ostream& os,Rational f)//并不属于Rational类,是一个独立的函数 
164 {
165     if(f.numerator % f.denominator == 0)
166     os << f.numerator / f.denominator;
167     else 
168     os << f.numerator << "/" << f.denominator;//打印分数 
169     return os; 
170 }
posted on 2023-08-18 15:30  一杯清酒邀明月  阅读(116)  评论(0编辑  收藏  举报