CPP_Basic_Code_P11.1-PP11.9.7
来源:互联网 发布:python turtle 库手册 编辑:程序博客网 时间:2024/04/29 11:36
CPP_Basic_Code_P11.1-PP11.9.7
// The Notes Created by Z-Tech on 2017/2/17.// All Codes Boot on 《C++ Primer Plus》V6.0// OS:MacOS 10.12.4// Translater:clang/llvm8.0.0 &g++4.2.1// Editer:iTerm 2&Sublime text 3// IDE: Xcode8.2.1&Clion2017.1//P11.1-P11.3Z_Head.h#ifndef XXX_H#define XXX_Hclass Time{private: int hours; int minutes;public: Time(); Time(int h,int m=0); void AddMin(int m); void AddHr(int h); void Reset(int h=0,int m=0); Time Sum(const Time& t) const; void Show() const;};#endifSubFunctions.cpp#include <iostream>#include "Z_Head.h"Time::Time(){ hours=minutes=0;}Time::Time(int h,int m){ hours=h; minutes=m;}void Time::AddMin(int m){ minutes+=m; hours+=minutes/60; minutes%=60;}void Time::AddHr(int h){ hours+=h;}void Time::Reset(int h,int m){ hours=h; minutes=m;}Time Time::Sum(const Time& t) const{ Time sum; sum.minutes=minutes+t.minutes; sum.hours=hours+t.hours+sum.minutes/60; sum.minutes%=60; return sum;}void Time::Show() const{ std::cout<<hours<<" hours, "<<minutes<<" minutes";}Main.cpp#include <iostream>#include "Z_Head.h"int main(){ using std::cout; using std::endl; Time planning; Time coding(2,40); Time fixing(5,55); Time total; cout<<"Planning time= "; planning.Show(); cout<<endl; cout<<"coding time= "; coding.Show(); cout<<endl; cout<<"fixing time= "; fixing.Show(); cout<<endl; total=coding.Sum(fixing); cout<<"coding.Sum(fixing)= "; total.Show(); cout<<endl; return 0;}//P11.4-P11.6Z_Head.h#ifndef XXX_H#define XXX_Hclass Time{private: int hours; int minutes;public: Time(); Time(int h,int m=0); void AddMin(int m); void AddHr(int h); void Reset(int h=0,int m=0); Time operator+(const Time& t) const; void Show() const;};#endifSubFunctions.cpp#include <iostream>#include "Z_Head.h"Time::Time(){ hours=minutes=0;}Time::Time(int h,int m){ hours=h; minutes=m;}void Time::AddMin(int m){ minutes+=m; hours+=minutes/60; minutes%=60;}void Time::AddHr(int h){ hours+=h;}void Time::Reset(int h,int m){ hours=h; minutes=m;}Time Time::operator+(const Time& t) const{ Time sum; sum.minutes=minutes+t.minutes; sum.hours=hours+t.hours+sum.minutes/60; sum.minutes%=60; return sum;}void Time::Show() const{ std::cout<<hours<<" hours, "<<minutes<<" minutes";}Main.cpp#include <iostream>#include "Z_Head.h"int main(){ using std::cout; using std::endl; Time planning; Time coding(2,40); Time fixing(5,55); Time total; cout<<"Planning time= "; planning.Show(); cout<<endl; cout<<"coding time= "; coding.Show(); cout<<endl; cout<<"fixing time= "; fixing.Show(); cout<<endl; total=coding+fixing; cout<<"coding+fixing= "; total.Show(); cout<<endl; Time morefixing(3,28); cout<<"more fixing time= "; morefixing.Show(); cout<<endl; total=morefixing.operator+(total); cout<<"morefixing.operator+(total)= "; total.Show(); cout<<endl; return 0;}//P11.7-P11.Z_Head.h#ifndef XXX_H#define XXX_Hclass Time{private: int hours; int minutes;public: Time(); Time(int h,int m=0); void AddMin(int m); void AddHr(int h); void Reset(int h=0,int m=0); Time operator+(const Time& t) const; Time operator-(const Time& t) const; Time operator*(double n) const; void Show() const;};#endifSubFunctions.cpp#include <iostream>#include "Z_Head.h"Time::Time(){ hours=minutes=0;}Time::Time(int h,int m){ hours=h; minutes=m;}void Time::AddMin(int m){ minutes+=m; hours+=minutes/60; minutes%=60;}void Time::AddHr(int h){ hours+=h;}void Time::Reset(int h,int m){ hours=h; minutes=m;}Time Time::operator+(const Time& t) const{ Time sum; sum.minutes=minutes+t.minutes; sum.hours=hours+t.hours+sum.minutes/60; sum.minutes%=60; return sum;}Time Time::operator-(const Time& t) const{ Time diff; int tot1,tot2; tot1=t.minutes+60*t.hours; tot2=minutes+60*hours; diff.minutes=(tot2-tot1)%60; diff.hours=(tot2-tot1)/60; return diff;}Time Time::operator*(double n) const{ Time result; long totalminutes=hours*n*60+minutes*n; result.hours=totalminutes/60; result.minutes=totalminutes%60; return result;}void Time::Show() const{ std::cout<<hours<<" hours, "<<minutes<<" minutes";}Main.cpp#include <iostream>#include "Z_Head.h"int main(){ using std::cout; using std::endl; Time weeding(4,35); Time waxing(2,47); Time total; Time diff; Time adjusted; cout<<"Weeding time= "; weeding.Show(); cout<<endl; cout<<"Waxing time= "; waxing.Show(); cout<<endl; cout<<"Total work time= "; total=weeding+waxing;//运算符+的重载 total.Show(); cout<<endl; diff=weeding-waxing;//运算符-的重载 cout<<"weeding-waxing time= "; diff.Show(); cout<<endl; adjusted=total*1.5;//运算符*的重载 cout<<"Adjusted work time= "; adjusted.Show(); cout<<endl; return 0;}//P11.10-P11.12Z_Head.h#ifndef XXX_H#define XXX_Hclass Time{private: int hours; int minutes;public: Time(); Time(int h,int m=0); void AddMin(int m); void AddHr(int h); void Reset(int h=0,int m=0); Time operator+(const Time& t) const; Time operator-(const Time& t) const; Time operator*(double n) const; friend Time operator*(double m,const Time& t){return t*m;}//此处内联函数 friend std::ostream& operator<<(std::ostream& os,const Time& t);//友元函数声明};#endifSubFunctions.cpp#include <iostream>#include "Z_Head.h"Time::Time(){ hours=minutes=0;}Time::Time(int h,int m){ hours=h; minutes=m;}void Time::AddMin(int m){ minutes+=m; hours+=minutes/60; minutes%=60;}void Time::AddHr(int h){ hours+=h;}void Time::Reset(int h,int m){ hours=h; minutes=m;}Time Time::operator+(const Time& t) const{ Time sum; sum.minutes=minutes+t.minutes; sum.hours=hours+t.hours+sum.minutes/60; sum.minutes%=60; return sum;}Time Time::operator-(const Time& t) const{ Time diff; int tot1,tot2; tot1=t.minutes+60*t.hours; tot2=minutes+60*hours; diff.minutes=(tot2-tot1)%60; diff.hours=(tot2-tot1)/60; return diff;}Time Time::operator*(double n) const{ Time result; long totalminutes=hours*n*60+minutes*n; result.hours=totalminutes/60; result.minutes=totalminutes%60; return result;}std::ostream& operator<<(std::ostream& os,const Time& t)//友元函数定义不需要friend,原型才需要{ os<<t.hours<<" hours,"<<t.minutes<<" minutes."; return os;//os引用为cout的别名}Main.cpp#include <iostream>#include "Z_Head.h"int main(){ using std::cout; using std::endl; Time aida(3,35); Time tosca(2,48); Time temp; cout<<"Aida and Tosca:\n"; cout<<aida<<"; "<<tosca<<endl;//理解<<原理 temp=aida+tosca; cout<<"aida+tosca: "<<temp<<endl; temp=aida*1.17; cout<<"Aida*1.17: "<<temp<<endl; cout<<"10.0*Tosca: "<<10.0*tosca<<endl;//可以输出表达式的值 return 0;}//P11.13-P11.15Z_Head.h#ifndef XXX_H#define XXX_H#include <iostream>namespace VECTOR{ class Vector { public: enum Mode{RECT,POL}; private: double x; double y; double mag; double ang; Mode mode; //私有函数 void set_mag(); void set_ang(); void set_x(); void set_y(); public: Vector(); Vector(double n1,double n2,Mode form=RECT); void reset(double n1,double n2,Mode form=RECT); ~Vector(); //以下是内联函数 double xva1() const {return x;} double yxva1() const {return y;} double magval() const {return mag;} double angval() const { return ang;} //模式函数 void polar_mode(); void rect_mode(); //操作符重载函数 Vector operator+(const Vector& b) const; Vector operator-(const Vector& b) const; Vector operator-() const; Vector operator*(double n) const; //友元函数 friend Vector operator*(double n,const Vector& a); friend std::ostream& operator<<(std::ostream& os,const Vector& v); };}#endifSubFunctions.cpp//#include <iostream>#include <cmath>#include "Z_Head.h"using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;namespace VECTOR{ const double Rad_to_deg=45.0/atan(1.0);//1弧度=57.29° //以下是私有函数 void Vector::set_mag()//求位移 { mag=sqrt(x*x+y*y); } void Vector::set_ang()//根据坐标求角度 { if (x==0.0&&y==0.0) ang=0.0; else ang=atan2(y,x); } void Vector::set_x()//由位移求x坐标 { x=mag*cos(ang); } void Vector::set_y()//由位移求y坐标 { y=mag*sin(ang); } //以下是公有函数 Vector::Vector()//构造函数 { x=y=ang=mag=0.0; mode=RECT; } Vector::Vector(double n1,double n2,Mode form)//构造函数重载的版本 { mode=form; if (form==RECT) { x=n1; y=n2; set_mag(); set_ang(); } else if (form==POL) { mag=n1; ang=n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<<"vector set to 0\n"; x=y=mag=ang=0.0; mode=RECT; } } void Vector::reset(double n1,double n2,Mode form)//重置函数 { mode=form; if (form==RECT) { x=n1; y=n2; set_mag(); set_ang(); } else if (form==POL) { mag=n1; ang=n2; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<<"vector set to 0\n"; x=y=mag=ang=0.0; mode=RECT; } } Vector::~Vector()//析构函数 { } void Vector::polar_mode()//极坐标设置函数 { mode=POL; } void Vector::rect_mode()//直角坐标设置函数 { mode=RECT; } Vector Vector::operator+(const Vector& b) const { return Vector(x+b.x,y+b.y); } Vector Vector::operator-(const Vector& b) const { return Vector(x-b.x,y-b.y); } Vector Vector::operator-() const { return Vector(-x,-y); } Vector Vector::operator*(double n) const { return Vector(x*n,y*n); } //以下是友元函数 Vector operator*(double n,const Vector& a)//重载*运算符 { return a*n; } std::ostream& operator<<(std::ostream& os,const Vector& v)//重载输出流运算符 { if (v.mode==Vector::RECT) os<<"(x,y)=("<<v.x<<","<<v.y<<")"; else if (v.mode==Vector::POL) { os<<"(m,a)=("<<v.mag<<","<<v.ang*Rad_to_deg<<")"; } else os<<"Vector object mode is invaild"; return os; }}Main.cpp#include <iostream>#include <cstdlib>#include <ctime>#include "Z_Head.h"int main(){ using namespace std; using VECTOR::Vector; srand(time(0));//用0作地址可省略time_t变量声明 double direction; Vector step; Vector result(0.0,0.0); unsigned long steps=0; double target; double dstep; cout<<"Enter target distance (q to quit): "; while (cin>>target) { cout<<"Enter step length: "; if (!(cin>>dstep)) break; while (result.magval()<target)//实际位移小于目标距离 { direction=rand()%360; step.reset(dstep,direction,Vector::POL);//步长,随机数和模式参数 result=result+step;//位移累加 steps++; } cout<<"After "<<steps<<" steps,the subject has the following location:\n"; cout<<result<<endl; result.polar_mode();//设为极坐标模式 cout<<" or\n"<<result<<endl; cout<<"Average outward distance per step= "<<result.magval()/steps<<endl; steps=0; result.reset(0.0,0.0); cout<<"Enter target distance (q to quit): "; } cout<<"Bye!\n"; cin.clear(); while (cin.get()!='\n') continue; return 0;//P11.16-P11.18Z_Head.h#ifndef XXX_H#define XXX_Hclass Stonewt{private: enum {Lbs_per_stn = 14}; int stone; double pds_left; double pounds;public: Stonewt(double lbs); Stonewt(int stn, double lbs); Stonewt(); ~Stonewt(); void show_lbs() const; void show_stn() const;};#endifSubFunctions.cpp#include <iostream>#include "Z_Head.h"using std::cout;Stonewt::Stonewt(double lbs){ stone = int (lbs)/Lbs_per_stn; pds_left = int (lbs)% Lbs_per_stn+lbs-int(lbs); pounds = lbs;}Stonewt::Stonewt(int stn, double lbs){ stone = stn; pds_left = lbs; pounds = stn*Lbs_per_stn+lbs;}Stonewt::Stonewt(){ stone = pds_left = pounds = 0;}Stonewt::~Stonewt(){}void Stonewt::show_lbs() const{ cout<<stone<<" stone, "<<pds_left<<" pounds\n";}void Stonewt::show_stn() const{ cout<<pounds<<" pounds\n";}Main.cpp#include <iostream>#include "Z_Head.h"using std::cout;void display(const Stonewt & st,int n);int main(){ Stonewt incognito = 275;//使用构造函数初始化 Stonewt wolfe(285.7); Stonewt taft(21,8); cout<<"The celebrity weighed "; incognito.show_stn(); cout<<"The detective weighed "; wolfe.show_stn(); cout<<"The President weighed "; taft.show_lbs(); incognito = 276.8; taft = 325; cout<<"After dinner,The celebrity weighed "; incognito.show_stn(); cout<<"After dinner,The President weighed "; taft.show_lbs(); display(taft,2); cout<<"The wrestler weighed even more.\n"; display(422,2); cout<<"No stone left unearned\n"; return 0;}void display(const Stonewt & st,int n){ for (int i = 0;i < n;i++) { cout<<"Wow!"; st.show_stn(); }}//P11.19-P11.21Z_Head.h#ifndef XXX_H#define XXX_Hclass Stonewt{private: enum {Lbs_per_stn = 14}; int stone; double pds_left; double pounds;public: Stonewt(double lbs); Stonewt(int stn, double lbs); Stonewt(); ~Stonewt(); void show_lbs() const; void show_stn() const; operator int() const; operator double()const;};#endifSubFunctions.cpp#include <iostream>#include "Z_Head.h"using std::cout;Stonewt::Stonewt(double lbs){ stone = int (lbs)/Lbs_per_stn; pds_left = int (lbs)% Lbs_per_stn+lbs-int(lbs); pounds = lbs;}Stonewt::Stonewt(int stn, double lbs){ stone = stn; pds_left = lbs; pounds = stn*Lbs_per_stn+lbs;}Stonewt::Stonewt(){ stone = pds_left = pounds = 0;}Stonewt::~Stonewt(){}void Stonewt::show_lbs() const{ cout<<stone<<" stone, "<<pds_left<<" pounds\n";}void Stonewt::show_stn() const{ cout<<pounds<<" pounds\n";}Stonewt::operator int() const{ return int(pounds + 0.5);}Stonewt::operator double()const{ return pounds;}main.cpp#include <iostream>#include "Z_Head.h"int main(){ using std::cout; Stonewt poppins(9,2.8); double p_wt = poppins; cout<<"Convert to double => "; cout<<"Poppins: "<<p_wt<<" pounds.\n"; cout<<"Convert to int => "; cout<<"Poppins: "<<int(poppins)<<" pounds.\n"; return 0;}//PP11.9.1Z_Head.h#ifndef XXX_H#define XXX_H#include <iostream>#include <cstdlib>#include <ctime>#include <fstream>#include <cmath>namespace VECTOR{ class Vector { public: enum Mode{RECT,POL}; private: double x; double y; double mag; double ang; Mode mode; //私有函数 void set_mag(); void set_ang(); void set_x(); void set_y(); public: Vector(); Vector(double n1,double n2,Mode form=RECT); void reset(double n1,double n2,Mode form=RECT); ~Vector(); //以下是内联函数 double xva1() const {return x;} double yxva1() const {return y;} double magval() const {return mag;} double angval() const { return ang;} //模式函数 void polar_mode(); void rect_mode(); //操作符重载函数 Vector operator+(const Vector& b) const; Vector operator-(const Vector& b) const; Vector operator-() const; Vector operator*(double n) const; //友元函数 friend Vector operator*(double n,const Vector& a); friend std::ostream& operator<<(std::ostream& os,const Vector& v); };}#endifSubFunctions.cpp#include "Z_Head.h"using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;namespace VECTOR{ const double Rad_to_deg=45.0/atan(1.0);//1弧度=57.29° //以下是私有函数 void Vector::set_mag()//求位移 { mag=sqrt(x*x+y*y); } void Vector::set_ang()//根据坐标求角度 { if (x==0.0&&y==0.0) ang=0.0; else ang=atan2(y,x); } void Vector::set_x()//由位移求x坐标 { x=mag*cos(ang); } void Vector::set_y()//由位移求y坐标 { y=mag*sin(ang); } //以下是公有函数 Vector::Vector()//构造函数 { x=y=ang=mag=0.0; mode=RECT; } Vector::Vector(double n1,double n2,Mode form)//构造函数重载的版本 { mode=form; if (form==RECT) { x=n1; y=n2; set_mag(); set_ang(); } else if (form==POL) { mag=n1; ang=n2/Rad_to_deg; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<<"vector set to 0\n"; x=y=mag=ang=0.0; mode=RECT; } } void Vector::reset(double n1,double n2,Mode form)//重置函数 { mode=form; if (form==RECT) { x=n1; y=n2; set_mag(); set_ang(); } else if (form==POL) { mag=n1; ang=n2; set_x(); set_y(); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<<"vector set to 0\n"; x=y=mag=ang=0.0; mode=RECT; } } Vector::~Vector()//析构函数 { } void Vector::polar_mode()//极坐标设置函数 { mode=POL; } void Vector::rect_mode()//直角坐标设置函数 { mode=RECT; } Vector Vector::operator+(const Vector& b) const { return Vector(x+b.x,y+b.y); } Vector Vector::operator-(const Vector& b) const { return Vector(x-b.x,y-b.y); } Vector Vector::operator-() const { return Vector(-x,-y); } Vector Vector::operator*(double n) const { return Vector(x*n,y*n); } //以下是友元函数 Vector operator*(double n,const Vector& a)//重载*运算符 { return a*n; } std::ostream& operator<<(std::ostream& os,const Vector& v)//重载输出流运算符 { if (v.mode==Vector::RECT) os<<"(x,y)=("<<v.x<<","<<v.y<<")"; else if (v.mode==Vector::POL) { os<<"(m,a)=("<<v.mag<<","<<v.ang*Rad_to_deg<<")"; } else os<<"Vector object mode is invaild"; return os; }}Main.cpp#include "Z_Head.h"int main(){ using namespace std; using VECTOR::Vector; srand(time(0));//用0作地址可省略time_t变量声明 double direction; Vector step; Vector result(0.0, 0.0); unsigned long steps = 0; double target; double dstep; ofstream fout;//输出流对象 fout.open("123Fuck.txt");//关联对象和文件 cout << "Enter target distance (q to quit): "; while (cin >> target) { cout << "Enter step length: "; if (!(cin >> dstep)) break; fout<<"Target Distance: "<<target<<",Step Size: "<<dstep<<endl; while (result.magval() < target)//实际位移小于目标距离 { fout<<steps<<": "<<result<<endl;//第二个result是类对象,<<被重载 direction = rand() % 360; step.reset(dstep, direction, Vector::POL);//步长,随机数和模式参数 result = result + step;//位移累加 steps++; } cout << "After " << steps << " steps,the subject has the following location:\n"; cout << result << endl; fout << "After " << steps << " steps,the subject has the following location:\n"; fout << result << endl; result.polar_mode();//设为极坐标模式 cout << " or\n" << result << endl; cout << "Average outward distance per step= " << result.magval() / steps << endl; fout << " or\n" << result << endl; fout << "Average outward distance per step= " << result.magval() / steps << endl; steps = 0; result.reset(0.0, 0.0); cout << "Enter target distance (q to quit): "; } cout << "Bye!\n"; cin.clear(); while (cin.get() != '\n') continue; return 0;}//PP11.9.2Z_Head.h#ifndef XXX_H#define XXX_H#include <iostream>#include <cstdlib>#include <ctime>#include <fstream>#include <cmath>namespace VECTOR{ class Vector { public: enum Mode{RECT,POL}; private: double x; double y; Mode mode; //私有函数 double set_mag() const; double set_ang() const; void set_x(double mag,double ang); void set_y(double mag,double ang); public: Vector(); Vector(double n1,double n2,Mode form=RECT); void reset(double n1,double n2,Mode form=RECT); ~Vector(); //以下是内联函数 double xva1() const {return x;} double yxva1() const {return y;} double magval() const {return set_mag();} double angval() const { return set_ang();} //模式函数 void polar_mode(); void rect_mode(); //操作符重载函数 Vector operator+(const Vector& b) const; Vector operator-(const Vector& b) const; Vector operator-() const; Vector operator*(double n) const; //友元函数 friend Vector operator*(double n,const Vector& a); friend std::ostream& operator<<(std::ostream& os,const Vector& v); };}#endifSubFunctions.cpp#include "Z_Head.h"using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;namespace VECTOR{ const double Rad_to_deg=45.0/atan(1.0);//1弧度=57.29° //以下是私有函数 double Vector::set_mag() const//求位移 { return sqrt(x*x+y*y); } double Vector::set_ang() const//根据坐标求角度 { if (x==0.0&&y==0.0) return 0.0; else return atan2(y,x); } void Vector::set_x(double mag,double ang)//引入参数,由位移求x坐标 { x=mag*cos(ang); } void Vector::set_y(double mag,double ang)//由位移求y坐标 { y=mag*sin(ang); } //以下是公有函数 Vector::Vector()//构造函数 { x=y=0.0; mode=RECT; } Vector::Vector(double n1,double n2,Mode form)//构造函数重载的版本 { mode=form; if (form==RECT) { x=n1; y=n2; } else if (form==POL) { set_x(n1,n2/Rad_to_deg); set_y(n1,n2/Rad_to_deg); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<<"vector set to 0\n"; x=y=0.0; mode=RECT; } } void Vector::reset(double n1,double n2,Mode form)//重置函数 { mode=form; if (form==RECT) { x=n1; y=n2; } else if (form==POL) { set_x(n1,n2/Rad_to_deg); set_y(n1,n2/Rad_to_deg); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<<"vector set to 0\n"; x=y=0.0; mode=RECT; } } Vector::~Vector()//析构函数 { } void Vector::polar_mode()//极坐标设置函数 { mode=POL; } void Vector::rect_mode()//直角坐标设置函数 { mode=RECT; } Vector Vector::operator+(const Vector& b) const { return Vector(x+b.x,y+b.y); } Vector Vector::operator-(const Vector& b) const { return Vector(x-b.x,y-b.y); } Vector Vector::operator-() const { return Vector(-x,-y); } Vector Vector::operator*(double n) const { return Vector(x*n,y*n); } //以下是友元函数 Vector operator*(double n,const Vector& a)//重载*运算符 { return a*n; } std::ostream& operator<<(std::ostream& os,const Vector& v)//重载输出流运算符 { if (v.mode==Vector::RECT) os<<"(x,y)=("<<v.x<<","<<v.y<<")"; else if (v.mode==Vector::POL) { os<<"(m,a)=("<<v.set_mag()<<","<<v.set_ang()*Rad_to_deg<<")"; } else os<<"Vector object mode is invaild"; return os; }}main.cpp#include "Z_Head.h"int main(){ using namespace std; using VECTOR::Vector; srand(time(0));//用0作地址可省略time_t变量声明 double direction; Vector step; Vector result(0.0, 0.0); unsigned long steps = 0; double target; double dstep; ofstream fout;//输出流对象 fout.open("123Fuck.txt");//关联对象和文件 cout << "Enter target distance (q to quit): "; while (cin >> target) { cout << "Enter step length: "; if (!(cin >> dstep)) break; fout<<"Target Distance: "<<target<<",Step Size: "<<dstep<<endl; while (result.magval() < target)//实际位移小于目标距离 { fout<<steps<<": "<<result<<endl;//第二个result是类对象,<<被重载 direction = rand() % 360; step.reset(dstep, direction, Vector::POL);//步长,随机数和模式参数 result = result + step;//位移累加 steps++; } cout << "After " << steps << " steps,the subject has the following location:\n"; cout << result << endl; fout << "After " << steps << " steps,the subject has the following location:\n"; fout << result << endl; result.polar_mode();//设为极坐标模式 cout << " or\n" << result << endl; cout << "Average outward distance per step= " << result.magval() / steps << endl; fout << " or\n" << result << endl; fout << "Average outward distance per step= " << result.magval() / steps << endl; steps = 0; result.reset(0.0, 0.0); cout << "Enter target distance (q to quit): "; } cout << "Bye!\n"; cin.clear(); while (cin.get() != '\n') continue; return 0;}//PP11.9.3Z_Head.h#ifndef XXX_H#define XXX_H#include <iostream>#include <cstdlib>#include <ctime>#include <fstream>#include <cmath>namespace VECTOR{ class Vector { public: enum Mode{RECT,POL}; private: double x; double y; Mode mode; //私有函数 double set_mag() const; double set_ang() const; void set_x(double mag,double ang); void set_y(double mag,double ang); public: Vector(); Vector(double n1,double n2,Mode form=RECT); void reset(double n1,double n2,Mode form=RECT); ~Vector(); //以下是内联函数 double xva1() const {return x;} double yxva1() const {return y;} double magval() const {return set_mag();} double angval() const { return set_ang();} //模式函数 void polar_mode(); void rect_mode(); //操作符重载函数 Vector operator+(const Vector& b) const; Vector operator-(const Vector& b) const; Vector operator-() const; Vector operator*(double n) const; //友元函数 friend Vector operator*(double n,const Vector& a); friend std::ostream& operator<<(std::ostream& os,const Vector& v); };}#endifSubFunctions.cpp#include "Z_Head.h"using std::sqrt;using std::sin;using std::cos;using std::atan;using std::atan2;using std::cout;namespace VECTOR{ const double Rad_to_deg=45.0/atan(1.0);//1弧度=57.29° //以下是私有函数 double Vector::set_mag() const//求位移 { return sqrt(x*x+y*y); } double Vector::set_ang() const//根据坐标求角度 { if (x==0.0&&y==0.0) return 0.0; else return atan2(y,x); } void Vector::set_x(double mag,double ang)//引入参数,由位移求x坐标 { x=mag*cos(ang); } void Vector::set_y(double mag,double ang)//由位移求y坐标 { y=mag*sin(ang); } //以下是公有函数 Vector::Vector()//构造函数 { x=y=0.0; mode=RECT; } Vector::Vector(double n1,double n2,Mode form)//构造函数重载的版本 { mode=form; if (form==RECT) { x=n1; y=n2; } else if (form==POL) { set_x(n1,n2/Rad_to_deg); set_y(n1,n2/Rad_to_deg); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<<"vector set to 0\n"; x=y=0.0; mode=RECT; } } void Vector::reset(double n1,double n2,Mode form)//重置函数 { mode=form; if (form==RECT) { x=n1; y=n2; } else if (form==POL) { set_x(n1,n2/Rad_to_deg); set_y(n1,n2/Rad_to_deg); } else { cout<<"Incorrect 3rd argument to Vector() -- "; cout<<"vector set to 0\n"; x=y=0.0; mode=RECT; } } Vector::~Vector()//析构函数 { } void Vector::polar_mode()//极坐标设置函数 { mode=POL; } void Vector::rect_mode()//直角坐标设置函数 { mode=RECT; } Vector Vector::operator+(const Vector& b) const { return Vector(x+b.x,y+b.y); } Vector Vector::operator-(const Vector& b) const { return Vector(x-b.x,y-b.y); } Vector Vector::operator-() const { return Vector(-x,-y); } Vector Vector::operator*(double n) const { return Vector(x*n,y*n); } //以下是友元函数 Vector operator*(double n,const Vector& a)//重载*运算符 { return a*n; } std::ostream& operator<<(std::ostream& os,const Vector& v)//重载输出流运算符 { if (v.mode==Vector::RECT) os<<"(x,y)=("<<v.x<<","<<v.y<<")"; else if (v.mode==Vector::POL) { os<<"(m,a)=("<<v.set_mag()<<","<<v.set_ang()*Rad_to_deg<<")"; } else os<<"Vector object mode is invaild"; return os; }}Main.cpp#include "Z_Head.h"int main(){ using namespace std; using VECTOR::Vector; srand(time(0));//用0作地址可省略time_t变量声明 double direction; Vector step; Vector result(0.0, 0.0); unsigned long steps = 0; double target; double dstep; double Max,Min,Average,Sum; int numbers,N; cout<<"Please enter numbers: "; cin>>numbers; N=numbers; Max=Min=Average=Sum=0; ofstream fout;//输出流对象 fout.open("123Fuck.txt");//关联对象和文件 cout << "Enter target distance: "; cin >> target; cout << "Enter step length: "; cin >> dstep; while (numbers) { fout<<"Target Distance: "<<target<<",Step Size: "<<dstep<<endl; while (result.magval() < target)//实际位移小于目标距离 { fout<<steps<<": "<<result<<endl;//第二个result是类对象,<<被重载 direction = rand() % 360; step.reset(dstep, direction, Vector::POL);//步长,随机数和模式参数 result = result + step;//位移累加 steps++; } cout << "After " << steps << " steps,the subject has the following location:\n"; cout << result << endl; fout << "After " << steps << " steps,the subject has the following location:\n"; fout << result << endl; result.polar_mode();//设为极坐标模式 cout << " or\n" << result << endl; cout << "Average outward distance per step= " << result.magval() / steps << endl; fout << " or\n" << result << endl; fout << "Average outward distance per step= " << result.magval() / steps << endl; if (Min == 0 || Max == 0) Min = Max = steps;//第一次初始化为第一次步数 if (Min > steps)//关键是和下一次循环的步数进行比较 Min = steps; if (Max < steps)//获取最大值 Max = steps; Sum += steps; steps = 0; result.reset(0.0, 0.0); numbers--; cout<<endl; fout<<endl; } Average=Sum/N; cout<<"Average: "<<Average<<" Max: "<<Max<<" Min: "<<Min<<" Sum: "<<Sum; fout<<"Average: "<<Average<<" Max: "<<Max<<" Min: "<<Min<<" Sum: "<<Sum; cout<<endl; fout<<endl; cout << "Bye!\n"; cin.clear(); while (cin.get() != '\n') continue; return 0;}//PP11.9.4Z_Head.h#ifndef XXX_H#define XXX_H#include <iostream>class Time{private: int hours; int minutes;public: Time(); Time(int h,int m=0); void AddMin(int m); void AddHr(int h); void Reset(int h=0,int m=0); Time operator*(double n) const; friend Time operator+(const Time& u,const Time& t); friend Time operator-(const Time& u,const Time& t); friend Time operator*(double m,const Time& t){return t*m;}//此处内联函数 friend std::ostream& operator<<(std::ostream& os,const Time& t);//友元函数声明};#endifSubFunctions.cpp#include "Z_Head.h"Time::Time(){ hours=minutes=0;}Time::Time(int h,int m){ hours=h; minutes=m;}void Time::AddMin(int m){ minutes+=m; hours+=minutes/60; minutes%=60;}void Time::AddHr(int h){ hours+=h;}void Time::Reset(int h,int m){ hours=h; minutes=m;}Time operator+(const Time& u,const Time& t)//改变包括去除类作用域和去除隐式const{ Time sum; sum.minutes=u.minutes+t.minutes; sum.hours=u.hours+t.hours+sum.minutes/60; sum.minutes%=60; return sum;}Time operator-(const Time& u,const Time& t){ Time diff; int tot1,tot2; tot1=t.minutes+60*(t.hours); tot2=u.minutes+60*(u.hours); diff.minutes=(tot2-tot1)%60; diff.hours=(tot2-tot1)/60; return diff;}Time Time::operator*(double n) const{ Time result; long totalminutes=hours*n*60+minutes*n; result.hours=totalminutes/60; result.minutes=totalminutes%60; return result;}std::ostream& operator<<(std::ostream& os,const Time& t)//友元函数定义不需要friend,原型才需要{ os<<t.hours<<" hours,"<<t.minutes<<" minutes."; return os;//os引用为cout的别名}Main.cpp#include "Z_Head.h"int main(){ using std::cout; using std::endl; Time aida(3,35); Time tosca(2,48); Time temp; cout<<"Aida and Tosca:\n"; cout<<aida<<"; "<<tosca<<endl;//理解<<原理 temp=aida+tosca; cout<<"aida+tosca: "<<temp<<endl; temp=aida*1.17; cout<<"Aida*1.17: "<<temp<<endl; cout<<"10.0*Tosca: "<<10.0*tosca<<endl;//可以输出表达式的值 return 0;}//PP11.9.5Z_Head.h#ifndef XXX_H#define XXX_H#include <iostream>class Stonewt{public: enum Mode{STN,LBS,FPD};private: enum {Lbs_per_stn = 14}; int stone; double pds_left; double pounds; int pounds_int; Mode mode; void set_stn(); void set_pds(); void set_pds_int();public: Stonewt(double lbs,Mode form); Stonewt(int stn, double lbs,Mode form); Stonewt(); ~Stonewt(); void stn_mode(); void pds_mode(); void int_pds_mode(); operator int()const; operator double()const; Stonewt operator+(const Stonewt & st) const; Stonewt operator-(const Stonewt & st) const; Stonewt operator*(double n) const; friend Stonewt operator*(double n,const Stonewt & st); friend std::ostream & operator<<(std::ostream & os,const Stonewt & st);};#endifSubFunctions.cpp#include "Z_Head.h"using std::cout;void Stonewt::set_stn(){ stone = int (pounds)/Lbs_per_stn; pds_left = int (pounds)% Lbs_per_stn+pounds-int(pounds);}void Stonewt::set_pds(){ pounds = stone*Lbs_per_stn + pds_left;}void Stonewt::set_pds_int(){ pounds_int = int(pounds);}Stonewt::Stonewt(double lbs,Mode form){ mode = form; if (form == STN) { stone = int(lbs) / Lbs_per_stn; pds_left = int(lbs) % Lbs_per_stn + lbs - int(lbs); set_pds(); set_pds_int(); } else if (form == LBS) { pounds_int = int(lbs); pounds = lbs; set_stn(); } else if (form == FPD) { pounds = lbs; set_pds_int(); set_stn(); } else { cout<< "Incorrect 3rd argument to Stonewt() -- "; cout<< "Stonewt set to 0\n"; stone = pounds = pds_left = 0; mode = STN; }}Stonewt::Stonewt(int stn, double lbs,Mode form){ mode = form; if (form == STN) { stone = stn; pds_left = lbs; set_pds(); set_pds_int(); } else if (form == LBS) { pounds_int = int(stn*Lbs_per_stn + lbs); pounds = stn*Lbs_per_stn + lbs; set_stn(); } else if (form == FPD) { pounds = stn*Lbs_per_stn + lbs; set_pds_int(); set_stn(); } else { cout<< "Incorrect 3rd argument to Stonewt() -- "; cout<< "Stonewt set to 0\n"; stone = pounds = pds_left = 0; mode = STN; }}Stonewt::Stonewt(){ stone = pds_left = pounds = 0; mode = STN;}Stonewt::~Stonewt(){}void Stonewt::stn_mode(){ mode = STN;}void Stonewt::pds_mode(){ mode = FPD;}void Stonewt::int_pds_mode(){ mode = LBS;}Stonewt::operator int() const{ return int(pounds+0.5);}Stonewt::operator double() const{ return pounds;}Stonewt Stonewt::operator+(const Stonewt & st) const{ return Stonewt(pounds+st.pounds,st.mode);}Stonewt Stonewt::operator-(const Stonewt & st) const{ return Stonewt(pounds-st.pounds,st.mode);}Stonewt Stonewt::operator*(double n) const{ return Stonewt(pounds*n,mode);}Stonewt operator*(double n,const Stonewt & st){ return Stonewt(st.pounds*n,st.mode);}std::ostream& operator<<(std::ostream & os,const Stonewt & st){ if (st.mode == Stonewt::STN) os<<st.stone<< " stone, " <<st.pds_left<< " pounds\n"; else if (st.mode == Stonewt::LBS) os<<st.pounds_int<< " pounds(int)\n"; else if (st.mode == Stonewt::FPD) os<<st.pounds<< " pounds(double)\n"; else os<< "Error in type\n"; return os;}Main.cpp#include "Z_Head.h"int main(){ using std::cout; using std::cin; using std::endl; Stonewt incognito(275,Stonewt::FPD); Stonewt wolfe(285.7,Stonewt::STN); Stonewt taft(21, 8,Stonewt::LBS); Stonewt temp; cout<< "The celebrity weighed "; cout<< incognito <<endl; cout<< "The detective weighed "; cout<<wolfe<<endl; cout<< "The President weighed "; cout<<taft<<endl; temp = incognito + wolfe; cout<< "Incognito + Wolfe = " << temp <<endl; temp = wolfe - incognito; cout<< "Wolfe - Incognito = " << temp <<endl; temp = taft * 10.0; cout<< "Taft * 10.0 = " << temp <<endl; temp = 10.0 * taft; cout<< "10.0 * Taft = " << temp <<endl; cin.get(); return 0;}//PP11.9.6Z_Head.h#ifndef XXX_H#define XXX_H#include <iostream>using std::cout;using std::cin;using std::endl;class Stonewt{private: enum {Lbs_per_stn = 14}; int stone; double pds_left; double pounds;public: Stonewt(double lbs); Stonewt(int stn, double lbs); Stonewt(); ~Stonewt(); //重载6个关系运算符 bool operator<(const Stonewt&st) const; bool operator<=(const Stonewt&st) const; bool operator>(const Stonewt&st) const; bool operator>=(const Stonewt&st) const; bool operator==(const Stonewt&st) const; bool operator!=(const Stonewt&st) const; //重载输出流友元函数 friend std::ostream & operator<<(std::ostream & os,const Stonewt & st);};#endifSubFunctions.cpp#include "Z_Head.h"Stonewt::Stonewt(double lbs){ stone = int(lbs) / Lbs_per_stn; pds_left = int(lbs) % Lbs_per_stn + lbs - int(lbs); pounds = lbs;}Stonewt::Stonewt(int stn, double lbs){ stone = stn; pds_left = lbs; pounds = stn*Lbs_per_stn + lbs;}Stonewt::Stonewt(){ stone = pds_left = pounds = 0;}Stonewt::~Stonewt(){}bool Stonewt::operator<(const Stonewt&st) const{ if (pounds<st.pounds) return true; else return false;}bool Stonewt::operator<=(const Stonewt&st) const{ if (pounds<=st.pounds) return true; else return false;}bool Stonewt::operator>(const Stonewt&st) const{ if (pounds>st.pounds) return true; else return false;}bool Stonewt::operator>=(const Stonewt&st) const{ if (pounds>=st.pounds) return true; else return false;}bool Stonewt::operator==(const Stonewt&st) const{ if (pounds==st.pounds) return true; else return false;}bool Stonewt::operator!=(const Stonewt&st) const{ if (pounds!=st.pounds) return true; else return false;}std::ostream& operator<<(std::ostream & os,const Stonewt & st){ os<<st.pounds<< " pounds\n"; return os;}Main.cpp#include "Z_Head.h"int main(){ Stonewt sw[6] = { 10.0, 11.0, 12.5 }; Stonewt temp(11.0); //读取循环录入剩余三个位置 for (int i = 3; i< 6; i++) { double input; cout<< "Enter #" <<i + 1 << ": "; cin>> input; sw[i] = input; } //输出全部的数组对象 for (int i = 0; i< 6; i++) cout<< "#" <<i<< ": " <<sw[i]; int count = 0; Stonewt Min = sw[0]; Stonewt Max = sw[0]; //计算最大最小和大于等于11.0的计数值 for (int i = 0; i< 6; i++) { if (Min >sw[i]) Min = sw[i]; if (Max <sw[i]) Max = sw[i]; if (temp >= sw[i]) count++; } cout<< "The Min pounds: " << Min; cout<< "The Max pounds: " << Max; cout<< "The numbers not under 11 pounds: " << count; cin.get(); cin.get(); return 0;}//PP11.9.7Z_Head.h#ifndef XXX_H#define XXX_H#include <iostream>using namespace std;class Complex{private: double R_number; double V_number;public: Complex(double r,double v); Complex(double r); Complex(); ~Complex(); Complex operator+(const Complex & rv) const; Complex operator-(const Complex & rv) const; Complex operator*(double n) const;//数字在后 Complex operator*(Complex & rv) const; Complex operator~() const; friend Complex operator*(double n,const Complex & rv);//数字在前 friend ostream& operator<<(ostream & os,const Complex & rv); friend istream& operator>>(istream & is,Complex & rv);};#endifSubFunctions.cpp#include "Z_Head.h"Complex::Complex(double r,double v){ R_number=r; V_number=v;}Complex::Complex(double r){ R_number=r; V_number=0.0;}Complex::Complex(){ R_number=V_number=0;}Complex::~Complex(){}Complex Complex::operator+(const Complex & rv) const{ return Complex(R_number+rv.R_number,V_number+rv.V_number);}Complex Complex::operator-(const Complex & rv) const{ return Complex(R_number-rv.R_number,V_number-rv.V_number);}Complex Complex::operator*(double n) const{ return Complex(n*R_number,n*V_number);}Complex Complex::operator*(Complex & rv) const{ double real,imaginary; real=R_number*rv.R_number-V_number*rv.V_number;//实部:AC-BD imaginary=R_number*rv.V_number+V_number*rv.R_number;//虚部:(AD+BC)i return Complex(real,imaginary);}Complex Complex::operator~() const{ return Complex(R_number,-V_number);}Complex operator*(double n,const Complex & rv){ return Complex(n*rv.R_number,n*rv.V_number);}ostream& operator<<(ostream & os,const Complex & rv){ os<<"("<<rv.R_number<<","<<rv.V_number<<"i)"; return os;}istream& operator>>(istream & is,Complex & rv)//警告!读取到rv中,rv决不能const{ cout<<"Enter the Real Number: \n"; if (is>>rv.R_number) { cout<<"Enter the imaginary Number: \n"; is>>rv.V_number; } return is;}Main.cpp#include "Z_Head.h"int main(){ Complex a(3.0,4.0); Complex c; cout<<"Enter a complex number (q to quit):\n"; while (cin>>c) { cout<<"c is "<<c<<'\n'; cout<<"complex conjugate is "<<~c<<'\n'; cout<<"a is "<<a<<'\n'; cout<<"a + c is "<< a + c <<'\n'; cout<<"a - c is "<< a - c <<'\n'; cout<<"a * c is "<< a * c <<'\n'; cout<<"2 * c is "<< 2 * c <<'\n';//友元函数实现 cout<<"c * 2 is "<< c * 2 <<'\n';//成员函数实现 cout<<"Enter a complex number (q to quit):\n"; } cout<<"Done!\n"; return 0;}
阅读全文
0 0
- CPP_Basic_Code_P11.1-PP11.9.7
- 9.7
- 9.7
- 9.7.1 初始化接口中的域
- 精通cobol--9.7.1 如何进行顺序查找
- DB2 9.7.1连接远程数据库编辑catalog步骤
- Java实训笔记1——9.7
- 07..9.7
- 9.7二维
- 黄迪明9.7
- 9.7总结
- cpp 9.7
- 9.7记事
- Refetion2017.9.7
- 基于Django的微信公众号开发(1) -- 在新浪sae部署Django1.9.7
- toad 9.7 序列號
- 让心简单(9.7)
- 让心简单(9.7)
- Android ArrayAdapter的使用
- 直销大时代已经来临
- Vue.js零基础学习笔记(一、二章Vue介绍)
- updata和alter的区别
- 13.JavaScript深入之类数组对象与arguments
- CPP_Basic_Code_P11.1-PP11.9.7
- myeclipse 启动服务时 socket bind failed 问题的解决(windows环境)
- 【mybatis】mybatis数据源源码剖析(JNDI、POOLED、UNPOOLED)
- 一个优秀程序员具备的15个特性
- 图像分割笔记
- 文件内容拼接
- java多线程买票,同步锁
- Gradle for Android 第一篇( 从 Gradle 和 AS 开始 )
- Enumation和Iterator的区别