十一章
//
// main.cpp
// C++PrimerPlusEleven
//
// Created by amengdev on 16/3/28.
// Copyright © 2016年 amengdev. All rights reserved.
//
#include <iostream>
#include "math.h"
#include "time.h"
using namespace std;
int main()
{
return 0;
}
/*
//复数的运算符重载
class Complex
{
private:
double x,y;
public:
//构造函数
Complex();
Complex(double m,double n);
~Complex();
//普通函数
//重载运算符函数
//输入输出函数>>,<<
friend istream & operator>>(istream & is,Complex &c);
friend ostream & operator<<(ostream & os,Complex &c);
//重载+,-,*函数
Complex operator+(Complex &c);
Complex operator-(Complex &c);
Complex operator*(double n);
friend Complex operator*(double n,Complex &c);
};
//构造函数
Complex::Complex()
{
x=y=0;
}
Complex::Complex(double m,double n)
{
x=m;
y=n;
}
Complex::~Complex()
{
}
//普通函数
//重载运算符函数
istream & operator>>(istream & is,Complex &c)
{
cout<<"请输入x:";
is>>c.x;
cout<<"请输入y:";
is>>c.y;
return is;
}
ostream & operator<<(ostream & os,Complex &c)
{
os<<"("<<c.x<<","<<c.y<<")"<<endl;
return os;
}
Complex Complex::operator+(Complex &c)
{
return Complex(x+c.x,y+c.y);
}
Complex Complex::operator-(Complex &c)
{
return Complex(x-c.x,y-c.y);
}
Complex Complex::operator*(double n)
{
return Complex(x*n,y*n);
}
Complex operator*(double n,Complex &c)
{
return c*n;
}
int main()
{
Complex c1(1.5,2.5);
Complex c2(1.6,2.6);
Complex c3=2*c1;
cout<<c3;
return 0;
}
*/
/*
//随机漫步完整实现
//运算符重载
class Vector
{
public:
enum MODE{Rect,Pol};
private:
MODE mode; //坐标类型
double x,y; //直角坐标
double length,angle; //极坐标
public:
//构造函数
Vector();
Vector(double m,double n,MODE mode=Rect);
Vector(double len); //随机漫步,生成一个步长为length的Vector
~Vector();
//普通函数
//设置直角坐标和极坐标函数
void setRect();
void setPol();
void setModePol();
//重置坐标函数
void reset(double m,double n,MODE mode=Rect);
void reset(double len); //随机漫步重置
//重载函数
//坐标+函数
Vector operator+(Vector &v);
//坐标-函数
Vector operator-(Vector &v);
//坐标*n函数
Vector operator*(double n);
//n*坐标函数
friend Vector operator*(double n,Vector v);
//取反-函数
Vector operator-();
//坐标<<输出函数
friend ostream& operator<<(ostream &os,Vector v);
//重载>和<函数
bool operator>(double len);
bool operator<(double len);
};
//=====Vector=====函数区域开始
//构造函数
Vector::Vector()
{
x=y=length=angle=0;
mode=Rect;
}
Vector::Vector(double m,double n,MODE mode)
{
if(mode==Rect)
{
x=m;
y=n;
this->mode=mode;
setPol();
}
else
{
length=m;
angle=n;
this->mode=mode;
setRect();
}
}
Vector::Vector(double len)
{
length=len;
angle=(double)(rand()%360);
mode=Pol;
setRect();
}
Vector::~Vector()
{
}
//普通函数
void Vector::setPol()
{
length=sqrt(x*x+y*y);
angle=atan2(y, x);
}
void Vector::setRect()
{
x=length*cos(angle);
y=length*sin(angle);
}
void Vector::setModePol()
{
mode=Vector::MODE::Pol;
}
void Vector::reset(double m, double n,MODE mode)
{
if(mode==Rect)
{
x=m;
y=n;
this->mode=mode;
setPol();
}
else
{
length=m;
angle=n;
this->mode=mode;
setRect();
}
}
void Vector::reset(double len) //随机漫步重置
{
length=len;
angle=(double)(rand()%360);
mode=Pol;
setRect();
}
//重载运算符函数
Vector Vector::operator+(Vector &v)
{
return Vector(x+v.x,y+v.y,Rect);
}
Vector Vector::operator-(Vector &v)
{
return Vector(x-v.x,y-v.y,Rect);
}
Vector Vector::operator*(double n)
{
return Vector(x*n,y*n,Rect);
}
Vector operator*(double n,Vector v)
{
return v*n;
}
Vector Vector::operator-()
{
return Vector(-x,-y,mode);
}
ostream& operator<<(ostream &os,Vector v)
{
if(v.mode==Vector::MODE::Rect)
{
os<<"Rect:"<<"("<<v.x<<","<<v.y<<")"<<endl;
}
else
{
os<<"Pol:"<<"("<<v.length<<","<<v.angle<<")"<<endl;
}
return os;
}
bool Vector::operator>(double len)
{
if(length>len)
return true;
else
return false;
}
bool Vector::operator<(double len)
{
if(length<len)
return true;
else
return false;
}
//=====Vector=====函数区域结束
int main()
{
srand(time((0)));
Vector v(0,0,Vector::MODE::Pol);
Vector temp(0,0,Vector::MODE::Pol);
int maxCount=0;
int count=0;
for(int i=0;i<100;i++)
{
count=0;
v.reset(0, 0,Vector::MODE::Pol);
while (v<10) {
temp.reset(1);
v=v+temp;
v.setModePol();
count++;
}
cout<<"第"<<i<<"次漫步步数:"<<count<<endl;
maxCount+=count;
}
cout<<"平均步数:"<<maxCount/100<<endl;
return 0;
}
*/
/*
class Vector
{
public:
enum Mode{Rect,Pol};
private:
double x,y;
double length,angle;
Mode mode;
public:
Vector();
Vector(double m,double n,Mode mo);
~Vector();
void setRect();
void setPol();
void reset(double m,double n,Mode mo=Rect);
//重载运算符
friend ostream & operator<<(ostream & os,Vector & v);
Vector operator+(Vector & v);
Vector operator-(Vector & v);
Vector operator-();
};
Vector::Vector()
{
x=0;
y=0;
length=0;
angle=0;
mode=Rect;
}
Vector::Vector(double m,double n,Mode mo)
{
if(mo==Rect)
{
x=m;
y=n;
mode=Rect;
setPol();
}
else
{
length=m;
angle=n;
mode=Pol;
setRect();
}
}
Vector::~Vector()
{
}
void Vector::setRect()
{
x=length*cos(angle);
y=length*sin(angle);
}
void Vector::setPol()
{
length=sqrt(x*x+y*y);
angle=atan2(y, x);
}
void Vector::reset(double m, double n,Mode mo)
{
if(mo==Rect)
{
x=m;
y=n;
mode=Rect;
setPol();
}
else
{
length=m;
angle=n;
mode=Pol;
setRect();
}
}
//重载运算符
ostream & operator<<(ostream & os,Vector & v)
{
os<<"x:"<<v.x<<endl;
os<<"y:"<<v.y<<endl;
os<<"length:"<<v.length<<endl;
os<<"angle:"<<v.angle<<endl;
return os;
}
Vector Vector::operator+(Vector & v)
{
return Vector(x+v.x,y+v.y,Rect);
}
Vector Vector::operator-(Vector & v)
{
return Vector(x-v.x,y-v.y,Rect);
}
Vector Vector::operator-()
{
return Vector(-x,-y,Rect);
}
int main()
{
Vector v1(10,10,Vector::Mode::Rect);
Vector v2(5,5,Vector::Mode::Rect);
Vector v3=v1+v2;
cout<<v3<<endl;
return 0;
}
*/
/*
//运算符的重载
//重载双目运算符
//友元重载
//友元方法重载<<运算符(使用友元可以多次<<)
//重载单目运算符
class Time{
private:
int hour;
int minute;
public:
Time();
Time(int h,int m);
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;
//运算符重载
//重载双目运算符
Time operator+(const Time & t) const;
Time operator*(int n) const;
//友元
friend Time operator*(int n,const Time & t);
//友元重载<<符
friend ostream & operator<<(ostream & os,const Time & t);
//单目运算符-
Time operator-();
};
Time::Time()
{
hour=0;
minute=0;
}
Time::Time(int h,int m)
{
hour=h;
minute=m;
}
void Time::addMin(int m)
{
minute+=m;
hour+=minute/60;
minute%=60;
}
void Time::addHr(int h)
{
hour+=h;
}
void Time::Reset(int h,int m)
{
hour=h;
minute=m;
}
Time Time::sum(const Time &t)const
{
Time sum;
sum.minute=(minute+t.minute)%60;
sum.hour=hour+t.hour+(minute+t.minute)/60;
return sum;
}
void Time::show() const
{
cout<<"Hour:"<<hour<<endl;
cout<<"Minute:"<<minute<<endl;
}
//运算符重载
Time Time::operator+(const Time & t) const
{
Time sum;
sum.minute=(minute+t.minute)%60;
sum.hour=hour+t.hour+(minute+t.minute)/60;
return sum;
}
Time Time::operator*(int n) const
{
Time sum;
sum.minute=minute*n%60;
sum.hour=hour*n+minute*n/60;
return sum;
}
Time operator*(int n,const Time & t)
{
return t*n;
}
ostream & operator<<(ostream & os,const Time & t)
{
os<<"hour:"<<t.hour<<endl;
os<<"minute"<<t.minute<<endl;
return os;
}
Time Time::operator-()
{
return Time(-hour,-minute);
}
int main() {
Time t1(1,30);
Time t2(2,40);
Time t3;
// t3=t1.sum(t2);
// t3.show();
// t3=t1+t2;
// t3.show();
// t3=4*t2;
// cout<<t3<<t1<<t2<<endl;
cout<<-t3<<endl;
return 0;
}
*/