十一章

//

//  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);  //随机漫步,生成一个步长为lengthVector

    ~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;

}

 */

 

posted on 2016-04-21 09:21  W.C  阅读(109)  评论(0编辑  收藏  举报

导航