WUSTOJ-cpp(ac代码汇总

由于 wustoj 属于闭源项目,无法看到他人提交代码,故在此记录个人 ac 代码,以便大家共同交流~希望你不是直接 CV 大法!~ 本博文将随个人进度持续更新。

wustoj 不知道是谁在负责维护,我联系不到,部分题有出现错误,有题目可能是笔误,有测试数据可能有错误。我站在我的角度客观分析题目,如仍有错误,望指正!

代码旨在直接解决题目要求,代码格式不规范请谅解

1.类和对象

c++1001 时钟类 Clock 的设计

#include<iostream>
using namespace std;

//你提交的代码在这里
class Clock
{
public:
    Clock()
    {
        hour = 8;
        minute = 16;
        second = 24;
    }
    Clock(int h, int m, int s)
    {
        hour = h;
        minute = m;
        second = s;
    }
    int hour, minute, second;
    void Show()
    {
        cout << hour << ":" << minute << ":" << second << endl;
    }
    void Set(int hh, int mm, int ss)
    {
        hour = hh;
        minute = mm;
        second = ss;
    }
};

int main()
{
    Clock c1,c2(12,25,38);
    cout<<"Show object c1:";
    c1.Show();
    cout<<"Show object c2:";
    c2.Show();
    int h,m,s;
    cin>>h>>m>>s;
    cout<<"Reset and Show object c1:";
    c1.Set(h,m,s);
    c1.Show();
    cin>>h>>m>>s;
    cout<<"Reset and Show object c2:";
    c2.Set(h,m,s);
    c2.Show();
    return 0;
}

c++1002 点类 Point 的设计

#include<iostream>
using namespace std;

//你提交的代码在这里
class Point
{
public:
    Point()
    {
        x = 10;
        y = 16;
    }
    Point(int xx, int yy)
    {
        x = xx;
        y = yy;
    }
    int x, y;
    void Show()
    {
        cout << "(" << x << "," << y << ")" << endl;
    }
    void Set(int xxx, int yyy)
    {
        x = xxx;
        y = yyy;
    }
};

int main()
{
    Point p1,p2(20,100);
    cout<<"Show object p1:";
    p1.Show();
    cout<<"Show object p2:";
    p2.Show();
    int x,y;
    cin>>x>>y;
    cout<<"Reset and Show object p1:";
    p1.Set(x,y);
    p1.Show();
    cin>>x>>y;
    cout<<"Reset and Show object p2:";
    p2.Set(x,y);
    p2.Show();
    return 0;
}

c++1003 圆类 Circle 的设计

#include<iostream>
using namespace std;

//你提交的代码在这里
class Circle
{
public:
    Circle()
    {
        radius = 10;
    }
    Circle(double r)
    {
        radius = r;
    }
    double radius;
    void Set(double r)
    {
        radius = r;
    }
    double Get()
    {
        return radius;
    }
    double Circumference()
    {
        return (radius * 2 * 3.14);
    }
    double Square()
    {
        return (radius * radius * 3.14);
    }
};

int main()
{
    Circle c1;
    cout<<"Show object c1:"<<endl;
    cout<<"    radius="<<c1.Get()<<endl;
    cout<<"    Circumference="<<c1.Circumference()<<endl;
    cout<<"    Square="<<c1.Square()<<endl;
    double r;
    cin>>r;
    Circle c2(r);
    cout<<"Show object c2:"<<endl;
    cout<<"    radius="<<c2.Get()<<endl;
    cout<<"    Circumference="<<c2.Circumference()<<endl;
    cout<<"    Square="<<c2.Square()<<endl;
    cin>>r;
    cout<<"Reset and Show object c1:"<<endl;
    c1.Set(r);
    cout<<"    radius="<<c1.Get()<<endl;
    cout<<"    Circumference="<<c1.Circumference()<<endl;
    cout<<"    Square="<<c1.Square()<<endl;
    return 0;
}

c++.1004 矩形类 Rectangle 的设计

#include<iostream>
using namespace std;

//你提交的代码在这里
class Rectangle
{
public:
    Rectangle()
    {
        width = 2;
        height = 2;
    }
    Rectangle(double w, double h)
    {
        width = w;
        height = h;
    }
    double width, height;
    void Set(double w, double h)
    {
        width = w;
        height = h;
    }
    double GetWidth()
    {
        return width;
    }
    double GetHeight()
    {
        return height;
    }
    double Perimeter()
    {
        return (width + height) * 2;
    }
    double Area()
    {
        return width * height;
    }
};

int main()
{
    Rectangle rect1;
    cout<<"Show object rect1:"<<endl;
    cout<<"    width="<<rect1.GetWidth()<<endl;
    cout<<"    height="<<rect1.GetHeight()<<endl;
    cout<<"    Perimeter="<<rect1.Perimeter()<<endl;
    cout<<"    Area="<<rect1.Area()<<endl;
    double w,h;
    cin>>w>>h;
    Rectangle rect2(w,h);
    cout<<"Show object rect2:"<<endl;
    cout<<"    width="<<rect2.GetWidth()<<endl;
    cout<<"    height="<<rect2.GetHeight()<<endl;
    cout<<"    Perimeter="<<rect2.Perimeter()<<endl;
    cout<<"    Area="<<rect2.Area()<<endl;
    cin>>w>>h;
    cout<<"Reset and Show object rect1:"<<endl;
    rect1.Set(w,h);
    cout<<"    width="<<rect1.GetWidth()<<endl;
    cout<<"    height="<<rect1.GetHeight()<<endl;
    cout<<"    Perimeter="<<rect1.Perimeter()<<endl;
    cout<<"    Area="<<rect1.Area()<<endl;
    return 0;
}

c++.1005 复数类 Complex 的设计

这道题个人认为测试数据有问题!下面给出两段代码,第一段是能够 ac 这题的代码(不过其实是错误的,当虚部为 1 或者-1 时,会表现出 1i 或者-1i。)。第二段代码则是我认为的正解!(估计是测试数据出错了

#include<iostream>
using namespace std;

//你提交的代码在这里
class Complex
{
public:
    Complex()
    {
        real = 1;
        imag = 2;
    }
    Complex(double r, double i)
    {
        real = r;
        imag = i;
    }
    double real, imag;
    void Show()
    {
        if (real == 0 && imag != 0) cout << imag << "i" << endl;
        else if (imag == 0) cout << real << endl;
        else
        {
            if (imag > 0) cout << real << "+" << imag << "i" << endl;
            else cout << real << imag << "i" << endl;
        }
    }
    void Set(double r, double i)
    {
        real = r;
        imag = i;
    }
};

int main()
{
    Complex c1;
    cout<<"Show object c1:";
    c1.Show();
    double real,imag;
    cin>>real>>imag;
    Complex c2(real,imag);
    cout<<"Show object c2:";
    c2.Show();
    cin>>real>>imag;
    cout<<"Reset and Show object c1:";
    c1.Set(real,imag);
    c1.Show();
    return 0;
}
#include<iostream>
using namespace std;

//你提交的代码在这里
class Complex
{
public:
    Complex()
    {
        real = 1;
        imag = 2;
    }
    Complex(double r, double i)
    {
        real = r;
        imag = i;
    }
    double real, imag;
    void Show()
    {
        if (imag == 0) cout << real << endl;
        else if (real == 0 && imag == 1) cout << "i" << endl;
        else if (real == 0 && imag == -1) cout << "-i" << endl;
        else if (real == 0) cout << imag << "i" << endl;
        else if (imag == 1) cout << real << "+i" << endl;
        else if (imag == -1) cout << real << "-i" << endl;
        else
        {
            if (imag > 0) cout << real << "+" << imag << "i" << endl;
            else cout << real << imag << "i" << endl;
        }
    }
    void Set(double r, double i)
    {
        real = r;
        imag = i;
    }
};

int main()
{
    Complex c1;
    cout<<"Show object c1:";
    c1.Show();
    double real,imag;
    cin>>real>>imag;
    Complex c2(real,imag);
    cout<<"Show object c2:";
    c2.Show();
    cin>>real>>imag;
    cout<<"Reset and Show object c1:";
    c1.Set(real,imag);
    c1.Show();
    return 0;
}

c++.1006 日期类 Date 的设计

#include<iostream>
using namespace std;

//你提交的代码在这里
class Date
{
public:
    Date()
    {
        year = 2015;
        month = 5;
        day = 20;
    }
    Date(int y, int m, int d)
    {
        year = y;
        month = m;
        day = d;
    }
    int year, month, day;
    void Show()
    {
        cout << year << "-" << month << "-" << day << endl;
    }
    void Set(int y, int m, int d)
    {
        year = y;
        month = m;
        day = d;
    }
    void Set()
    {
        year = 2050;
        month = 12;
        day = 1;
    }
    int GetYear()
    {
        return year;
    }
    int GetMonth()
    {
        return month;
    }
    int GetDay()
    {
        return day;
    }
};

int main()
{
    Date d1;
    cout<<"Show object d1:";
    cout<<d1.GetYear()<<"-"<<d1.GetMonth()<<"-"<<d1.GetDay()<<endl;
    int y,m,d;
    cin>>y>>m>>d;
    Date d2(y,m,d);
    cout<<"Show object d2:";
    cout<<d2.GetYear()<<"-"<<d2.GetMonth()<<"-"<<d2.GetDay()<<endl;
    cin>>y>>m>>d;
    cout<<"Reset and Show object d1:";
    d1.Set(y,m,d);
    d1.Show();
    cout<<"Reset and Show object d2:";
    d2.Set();
    d2.Show();
    return 0;
}

c++.1007 学生类 Student 的设计

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class Student
{
public:
    Student()
    {
        id = 10000;
        name = "NULL";
        score = 0;
    }
    Student(int i, string n, int s)
    {
        id = i;
        name = n;
        score = s;
    }
    int id;
    string name;
    int score;
    int GetId()
    {
        return id;
    }
    string GetName()
    {
        return name;
    }
    int GetScore()
    {
        return score;
    }
    void Set(int i, string n, int s)
    {
        id = i;
        name = n;
        score = s;
    }
    void Set()
    {
        id = 99999;
        name = "NONAME";
        score = 100;
    }
    void Show()
    {
        cout << id << "-" << name << "-" << score << endl;
    }
};

int main()
{
    Student stu1;
    cout<<"Show object stu1:";
    cout<<stu1.GetId()<<"-"<<stu1.GetName()<<"-"<<stu1.GetScore()<<endl;
    int no,s;
    char xm[9];
    cin>>no>>xm>>s;
    Student stu2(no,xm,s);
    cout<<"Show object stu2:";
    cout<<stu2.GetId()<<"-"<<stu2.GetName()<<"-"<<stu2.GetScore()<<endl;
    cin>>no>>xm>>s;
    cout<<"Reset and Show object stu1:";
    stu1.Set(no,xm,s);
    stu1.Show();
    cout<<"Reset and Show object stu2:";
    stu2.Set();
    stu2.Show();
    return 0;
}

c++.1008 线段类 Line 的设计

#include<iostream>
#include<cmath>
using namespace std;

//你提交的代码在这里
class Line
{
public:
    Line()
    {
        sx = 0, sy = 0;
        ex = 0, ey = 0;
    }
    Line(double sxx, double syy, double exx, double eyy)
    {
        sx = sxx, sy = syy;
        ex = exx, ey = eyy;
    }
    double sx, sy, ex, ey;
    void Show()
    {
        double len = sqrt((sx - ex) * (sx - ex) + (sy - ey) * (sy - ey));
        cout << "(" << sx << "," << sy << ")--(" << ex << "," << ey << ")length=" << len << endl;
    }
    void Set(double sxx, double syy, double exx, double eyy)
    {
        sx = sxx, sy = syy;
        ex = exx, ey = eyy;
    }
    void Set()
    {
        sx = 1, sy = 5;
        ex = 8, ey = 4;
    }
};

int main()
{
    Line L1;
    cout<<"Show object L1:";
    L1.Show();
    double x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    Line L2(x1,y1,x2,y2);
    cout<<"Show object L2:";
    L2.Show();
    cin>>x1>>y1>>x2>>y2;
    cout<<"Reset and Show object L1:";
    L1.Set(x1,y1,x2,y2);
    L1.Show();
    cout<<"Reset and Show object L2:";
    L2.Set();
    L2.Show();
    return 0;
}

c++.1009 国家类 Country 的设计

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class Country
{
public:
    Country()
    {
        name = "NULL";
        capital = "NONE";
        num = 0;
    }
    Country(string n, string c, int nu)
    {
        name = n;
        capital = c;
        num = nu;
    }
    string name, capital;
    int num;
    string GetCapital()
    {
        return capital;
    }
    string GetName()
    {
        return name;
    }
    int GetPopulation()
    {
        return num;
    }
    void Set(string n, string c, int nu)
    {
        name = n;
        capital = c;
        num = nu;
    }
    void Set()
    {
        name = "China";
        capital = "Beijing";
        num = 1400000000;
    }
    void Show()
    {
        cout << name << "-" << capital << "-" << num << endl;
    }
};

int main()
{
    Country c1;
    cout<<"Show object c1:";
    cout<<c1.GetName()<<"-"<<c1.GetCapital()<<"-"<<c1.GetPopulation()<<endl;
    char name[40],capital[40];
    int population;
    cin>>name>>capital>>population;
    Country c2(name,capital,population);
    cout<<"Show object c2:";
    cout<<c2.GetName()<<"-"<<c2.GetCapital()<<"-"<<c2.GetPopulation()<<endl;
    cin>>name>>capital>>population;
    cout<<"Reset and Show object c1:";
    c1.Set(name,capital,population);
    c1.Show();
    cout<<"Reset and Show object c2:";
    c2.Set();
    c2.Show();
    return 0;
}

c++.1010 长期存款类 Fixed_Deposit 的设计

#include<iostream>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Fixed_Deposit
{
public:
    Fixed_Deposit()
    {
        amount = 10000.00;
        rate = 0.0330;
        year = 1;
    }
    Fixed_Deposit(double a, double r, int y)
    {
        amount = a;
        rate = r;
        year = y;
    }
    double amount, rate;
    int year;
    void Show()
    {
        double total = amount * rate * year + amount;
        cout << "amount=" << amount << "  rate=" << rate * 100 << "%  years=" << year << "  total=" << total << endl;
    }
    void Set(double a, double r, int y)
    {
        amount = a;
        rate = r;
        year = y;
    }
    double GetAmount()
    {
        return amount;
    }
    double GetRate()
    {
        return rate;
    }
    int GetYears()
    {
        return year;
    }
    double GetAll()
    {
        double total = amount * rate * year + amount;
        return total;
    }
};

int main()
{
    cout<<fixed<<setprecision(2);
    Fixed_Deposit f1;
    cout<<"Show object f1:"<<endl;
    cout<<"amount="<<f1.GetAmount();        //输出存款本金
    cout<<"  rate="<<f1.GetRate()*100<<"%"; //输出存款利率
    cout<<"  years="<<f1.GetYears();        //输出存款年数
    cout<<"  total="<<f1.GetAll()<<endl;    //输出到期本息合计
    double amount,rate;
    int years;
    cin>>amount>>rate>>years;
    Fixed_Deposit f2(amount,rate,years);
    cout<<"Show object f2:"<<endl;
    cout<<"amount="<<f2.GetAmount();        //输出存款本金
    cout<<"  rate="<<f2.GetRate()*100<<"%"; //输出存款利率
    cout<<"  years="<<f2.GetYears();        //输出存款年数
    cout<<"  total="<<f2.GetAll()<<endl;    //输出到期本息合计
    cin>>amount>>rate>>years;
    cout<<"Reset and Show object f1:"<<endl;
    f1.Set(amount,rate,years);
    f1.Show();
    return 0;
}

c++.1011 书类 Book 的设计

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Book
{
public:
    Book()
    {
        author = "NONE";
        title = "NULL";
        price = 0.00;
    }
    Book(string a, string t, double p)
    {
        author = t;
        title = a;
        price = p;
    }
    string author;
    string title;
    double price;
    void Set(string a, string t, double p)
    {
        author = t;
        title = a;
        price = p;
    }
    void Show()
    {
        cout << title << "," << author << "," << price << endl;
    }
    void Set()
    {
        author = "同济大学数学系";
        title = "高等数学(第七版)上册";
        price = 37.70;
    }
    string GetAuthor()
    {
        return author;
    }
    string GetTitle()
    {
        return title;
    }
    double GetPrice()
    {
        return price;
    }
};

int main()
{
    cout<<fixed<<setprecision(2);
    Book b1;
    cout<<"Show object b1:";
    cout<<b1.GetTitle()<<","<<b1.GetAuthor()<<","<<b1.GetPrice()<<endl;
    char title[40],author[40];
    double price;
    cin>>title>>author>>price;
    Book b2(title,author,price);
    cout<<"Show object b2:";
    cout<<b2.GetTitle()<<","<<b2.GetAuthor()<<","<<b2.GetPrice()<<endl;
    cin>>title>>author>>price;
    cout<<"Reset and Show object b1:";
    b1.Set(title,author,price);
    b1.Show();
    cout<<"Reset and Show object b2:";
    b2.Set();
    b2.Show();
    return 0;
}

c++.1012 建筑物类 building 的设计

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Building
{
public:
    Building()
    {
        name = "NULL";
        height = 0.00;
        floors = 0;
    }
    Building(string n, double h, int f)
    {
        name = n;
        height = h;
        floors = f;
    }
    string name;
    int floors;
    double height;
    void Set(string n, double h, int f)
    {
        name = n;
        height = h;
        floors = f;
    }
    void Set()
    {
        name = "None";
        height = 20.00;
        floors = 7;
    }
    void Show()
    {
        //cout << fixed<< setprecision(2);
        cout << name << "--" << height << "米--" << floors << "层" << endl;
    }
    string GetName()
    {
        return name;
    }
    double GetHeight()
    {
        return height;
    }
    int GetFloors()
    {
        return floors;
    }
};

int main()
{
    cout<<fixed<<setprecision(2);
    Building b1;
    cout<<"Show object b1:";
    cout<<b1.GetName()<<"--"<<b1.GetHeight()<<"米--"<<b1.GetFloors()<<"层"<<endl;
    char name[40];
    double height;
    int floors;
    cin>>name>>height>>floors;
    Building b2(name,height,floors);
    cout<<"Show object b2:";
    cout<<b2.GetName()<<"--"<<b2.GetHeight()<<"米--"<<b2.GetFloors()<<"层"<<endl;
    cin>>name>>height>>floors;
    cout<<"Reset and Show object b1:";
    b1.Set(name,height,floors);
    b1.Show();
    cout<<"Reset and Show object b2:";
    b2.Set();
    b2.Show();
    return 0;
}

c++.1013 课程类 Course 的设计

本题的提供代码中,id 的数据类型是 double,这里题目笔误,id 的数据类型应该是 int(自行修改。

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class Course
{
public:
    Course()
    {
        id = 0;
        name = "NULL";
        credit = 0;
    }
    Course(int i, string n, int c)
    {
        id = i;
        name = n;
        credit = c;
    }
    int id;
    string name;
    int credit;
    void Show()
    {
        cout << id << "/" << name << "/" << credit << endl;
    }
    void Set(int i, string n, int c)
    {
        id = i;
        name = n;
        credit = c;
    }
    void Set()
    {
        id = 9999999;
        name = "None";
        credit = 10000;
    }
    int GetId()
    {
        return id;
    }
    string GetName()
    {
        return name;
    }
    int GetCredit()
    {
        return credit;
    }
};

int main()
{
    Course c1;
    cout<<"Show object c1:";
    cout<<c1.GetId()<<"/"<<c1.GetName()<<"/"<<c1.GetCredit()<<endl;
    double id;
    char name[40];
    int credit;
    cin>>id>>name>>credit;
    Course c2(id,name,credit);
    cout<<"Show object c2:";
    cout<<c2.GetId()<<"/"<<c2.GetName()<<"/"<<c2.GetCredit()<<endl;
    cin>>id>>name>>credit;
    cout<<"Reset and Show object c1:";
    c1.Set(id,name,credit);
    c1.Show();
    cout<<"Reset and Show object c2:";
    c2.Set();
    c2.Show();
    return 0;
}

c++.1014 实验室类 Laboratory 的设计

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class Laboratory
{
public:
    Laboratory(int r, int n, string s)
    {
        room_num = r;
        num = n;
        name = s;
    }
    Laboratory()
    {
        room_num = 0;
        num = 0;
        name = "NULL";
    }
    int room_num;
    int num;
    string name;
    void Set(int r, int n, string s)
    {
        room_num = r;
        num = n;
        name = s;
    }
    void Set()
    {
        room_num = 99999;
        num = 1000;
        name = "None";
    }
    void Show()
    {
        cout << room_num << "/" << num << "/" << name << endl;
    }
    int GetRoom_no()
    {
        return room_num;
    }
    int GetCapacity()
    {
        return num;
    }
    string GetName()
    {
        return name;
    }
};

int main()
{
    Laboratory L1;
    cout<<"Show object L1:";
    cout<<L1.GetRoom_no()<<"/"<<L1.GetCapacity()<<"/"<<L1.GetName()<<endl;
    int room_no;
    int capacity;
    char name[20];
    cin>>room_no>>capacity>>name;
    Laboratory L2(room_no,capacity,name);
    cout<<"Show object L2:";
    cout<<L2.GetRoom_no()<<"/"<<L2.GetCapacity()<<"/"<<L2.GetName()<<endl;
    cin>>room_no>>capacity>>name;
    cout<<"Reset and Show object L1:";
    L1.Set(room_no,capacity,name);
    L1.Show();
    cout<<"Reset and Show object L2:";
    L2.Set();
    L2.Show();
    return 0;
}

c++.1015 个人 Person 类的设计

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class Person
{
public:
    Person(string n, string s, int a)
    {
        name = n;
        sex = s;
        age = a;
    }
    Person()
    {
        name = "NULL";
        sex = "NO";
        age = 0;
    }
    string name;
    string sex;
    int age;
    void Set(string n, string s, int a)
    {
        name = n;
        sex = s;
        age = a;
    }
    void Set()
    {
        name = "Unknown";
        sex = "FM";
        age = 1000;
    }
    void Show()
    {
        cout << name << "," << sex << "," << age << endl;
    }
    string GetName()
    {
        return name;
    }
    string GetSex()
    {
        return sex;
    }
    int GetAge()
    {
        return age;
    }
};

int main()
{
    Person p1;
    cout<<"Show object p1:";
    cout<<p1.GetName()<<","<<p1.GetSex()<<","<<p1.GetAge()<<endl;
    char name[20],sex[10];
    int age;
    cin>>name>>sex>>age;
    Person p2(name,sex,age);
    cout<<"Show object p2:";
    cout<<p2.GetName()<<","<<p2.GetSex()<<","<<p2.GetAge()<<endl;
    cin>>name>>sex>>age;
    cout<<"Reset and Show object p1:";
    p1.Set(name,sex,age);
    p1.Show();
    cout<<"Reset and Show object p2:";
    p2.Set();
    p2.Show();
    return 0;
}

2.运算符重载

c++.2001 时间类运算符重载

#include<iostream>
using namespace std;

//你提交的代码在这里
class Time
{
public:
    Time()
    {
        hour = 1;
        minute = 2;
        second = 3;
    }
    Time(int h, int m, int s)
    {
        hour = h;
        minute = m;
        second = s;
      	normalize();
    }
    int hour, minute, second;
    void Set(int hh, int mm, int ss)
    {
        hour = hh;
        minute = mm;
        second = ss;
        normalize();
    }
    void normalize()
    {
        minute += second / 60;
        second %= 60;
        if (second < 0)
        {
            second += 60;
            minute--;
        }
        hour += minute / 60;
        minute %= 60;
        if (minute < 0)
        {
            minute += 60;
            hour--;
        }
        while (hour < 0)
        {
            hour += 24;
        }
        hour %= 24;
    }
};
ostream& operator<< (ostream& cout, Time& t)
{
    cout << t.hour << ":" << t.minute << ":" << t.second;
    return cout;
}
long long operator- (Time& t1, Time& t2)
{
    long long s1 = t1.hour * 3600 + t1.minute * 60 + t1.second;
    long long s2 = t2.hour * 3600 + t2.minute * 60 + t2.second;
    return (s1 - s2);
}
Time operator+ (Time& t1, int s)
{
    Time t2 = t1;
    t2.second += s;
    t2.normalize();
    return t2;
}
Time operator- (Time& t1, int s)
{
    return t1 + (-s);
}

int main()
{
    Time t1;
    cout<<"Show object t1:"<<t1<<endl;
    int hour,minute,second;
    cin>>hour>>minute>>second;
    Time t2(hour,minute,second);
    cout<<"Show object t2:"<<t2<<endl;
    cin>>hour>>minute>>second;
    t1.Set(hour,minute,second);
    cout<<"Reset and Show object t1:"<<t1<<endl;
    int n;
    n=t2-t1;
    cout<<t2<<"-"<<t1<<"="<<n<<"s"<<endl;
    cin>>n;
    cout<<t1<<"+"<<n<<"s=";
    t2=t1+n;
    cout<<t2<<endl;
    cout<<t1<<"-"<<n<<"s=";
    t1=t1-n;
    cout<<t1<<endl;
    return 0;
}

c++.2002 日期类运算符重载

#include<iostream>
using namespace std;

//你提交的代码在这里
class Date
{
public:
    Date()
    {
        year = 2023;
        month = 5;
        day = 20;
    }
    Date(int y, int m, int d)
    {
        year = y;
        month = m;
        day = d;
        normalize();
    }
    int year, month, day;
    int mp[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int mr[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    bool isr(int y)
    {
        return (y % 400 == 0) || (y % 100 != 0 && y % 4 == 0);
    }
    long long tianshu()
    {
        long long num = 0;
        for (int y = 1; y < year; y++)
        {
            num += isr(y) ? 366 : 365;
        }
        for (int m = 1; m < month; m++)
        {
            if (isr(year)) num += mr[m];
            else num += mp[m];
        }
        num += day;
        return num;
    }
    void normalize()
    {
        while (day > (isr(year) ? mr[month] : mp[month]))
        {
            day -= (isr(year) ? mr[month] : mp[month]);
            month++;
            if (month > 12)
            {
                month = 1;
                year++;
            }
        }
        while (day < 1)
        {
            month--;
            if (month < 1)
            {
                month = 12;
                year--;
            }
            day += (isr(year) ? mr[month] : mp[month]);
        }
    }
    void Set(int y, int m, int d)
    {
        year = y;
        month = m;
        day = d;
        normalize();
    }
    long long operator- (Date& d)
    {
        return tianshu() - d.tianshu();
    }
    Date operator+ (int n)
    {
        Date tmp = *this;
        tmp.day += n;
        tmp.normalize();
        return tmp;
    }
    Date operator- (int n)
    {
        return *this + (-n);
    }
};
ostream& operator<< (ostream& cout, Date& d)
{
    cout << d.year << "/" << d.month << "/" << d.day;
    return cout;
}

int main()
{
    Date d1;
    cout<<"Show object d1:"<<d1<<endl;
    int year,month,day;
    cin>>year>>month>>day;
    Date d2(year,month,day);
    cout<<"Show object d2:"<<d2<<endl;
    cin>>year>>month>>day;
    d1.Set(year,month,day);
    cout<<"Reset and Show object d1:"<<d1<<endl;
    int n;
    n=d2-d1;
    cout<<d2<<" - "<<d1<<" = "<<n<<endl;
    cin>>n;
    cout<<d1<<" + "<<n<<" = ";
    d2=d1+n;
    cout<<d2<<endl;
    cout<<d1<<" - "<<n<<" = ";
    d1=d1-n;
    cout<<d1<<endl;
    return 0;
}

c++.2003 复数类运算符重载

#include<iostream>
using namespace std;

//你提交的代码在这里
class Complex
{
public:
    Complex()
    {
        real = 0;
        imag = 0;
    }
    Complex(double r, double i)
    {
        real = r;
        imag = i;
    }
    double real, imag;
    void Set(double r, double i)
    {
        real = r;
        imag = i;
    }
    Complex operator+ (Complex c)
    {
        Complex tmp = *this;
        tmp.real += c.real;
        tmp.imag += c.imag;
        return tmp;
    }
    Complex operator- (Complex c)
    {
        Complex tmp = *this;
        tmp.real -= c.real;
        tmp.imag -= c.imag;
        return tmp;
    }
    Complex operator* (Complex c)
    {
        Complex tmp;
        tmp.real = this->real * c.real - this->imag * c.imag;
        tmp.imag = this->real * c.imag + this->imag * c.real;
        return tmp;
    }
};
ostream& operator<< (ostream& cout, Complex& c)
{
    if (c.imag == 0) cout << c.real;
    else if (c.real == 0 && c.imag == 1) cout << "i";
    else if (c.real == 0 && c.imag == -1) cout << "-i";
    else if (c.real == 0) cout << c.imag << "i";
    else if (c.imag == 1) cout << c.real << "+i";
    else if (c.imag == -1) cout << c.real << "-i";
    else
    {
        if (c.imag > 0) cout << c.real << "+" << c.imag << "i";
        else cout << c.real << c.imag << "i";
    }
    return cout;
}

int main()
{
    Complex c1;
    cout<<"Show object c1:"<<c1<<endl;
    double re,im;
    cin>>re>>im;
    Complex c2(re,im);
    cout<<"Show object c2:"<<c2<<endl;
    cin>>re>>im;
    c1.Set(re,im);
    cout<<"Reset and Show object c1:"<<c1<<endl;
    Complex c3;
    c3=c1+c2;
    cout<<c1<<" + "<<c2<<" = "<<c3<<endl;
    c3=c1-c2;
    cout<<c1<<" - "<<c2<<" = "<<c3<<endl;
    c3=c1*c2;
    cout<<c1<<" * "<<c2<<" = "<<c3<<endl;
    return 0;
}

c++.2004 学生类运算符重载

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class Student
{
public:
    int id;
    string name;
    int score;
    bool operator> (Student s)
    {
        if (this->score == s.score) return this->id > s.id;
        else return this->score > s.score;
    }
};
istream& operator>> (istream& cin, Student& s)
{
    cin >> s.id >> s.name >> s.score;
    return cin;
}
ostream& operator<< (ostream& cout, Student& s)
{
    cout << "id=" << s.id << ",name=" << s.name << ",score=" << s.score;
    return cout;
}

int main()
{
    int i,j,n;
    Student t;
    cin>>n;
    Student *stu=new Student[n];
    for(i=0;i<n;i++)
        cin>>stu[i];
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(stu[j]>stu[j+1])
            {  t=stu[j];  stu[j]=stu[j+1];   stu[j+1]=t;    }
    for(i=0;i<n;i++)
        cout<<i+1<<":"<<stu[i]<<endl;
    delete[]stu;
    return 0;
}

c++.2005 短整数类运算符重载

本题在定义除法运算符号时,题目没有说明当 除数 为 0 时,应该返回什么来表明无意义计算。但这是应该注意的事情!

#include<iostream>
using namespace std;

//你提交的代码在这里
class SmallInt
{
public:
    int val;
    void normalize()
    {
        while (val > 127) val -= 256;
        while (val < -128) val += 256;
    }
    SmallInt operator+ (SmallInt s)
    {
        SmallInt tmp = *this;
        tmp.val += s.val;
        tmp.normalize();
        return tmp;
    }
    SmallInt operator- (SmallInt s)
    {
        SmallInt tmp = *this;
        tmp.val -= s.val;
        tmp.normalize();
        return tmp;
    }
    SmallInt operator* (SmallInt s)
    {
        SmallInt tmp = *this;
        tmp.val *= s.val;
        tmp.normalize();
        return tmp;
    }
    SmallInt operator/ (SmallInt s)
    {
        if (s.val == 0) cout << "题目不严谨。。。";
        SmallInt tmp = *this;
        tmp.val /= s.val;
        tmp.normalize();
        return tmp;
    }
};
istream& operator>> (istream& cin, SmallInt& s)
{
    cin >> s.val;
    s.normalize();
    return cin;
}
ostream& operator<< (ostream& cout, SmallInt& s)
{
    cout << s.val;
    return cout;
}

int main()
{
    SmallInt s1,s2,s3;
    cin>>s1>>s2;
    s3=s1+s2;
    cout<<s1<<" + "<<s2<<" = "<<s3<<endl;
    s3=s1-s2;
    cout<<s1<<" - "<<s2<<" = "<<s3<<endl;
    s3=s1*s2;
    cout<<s1<<" * "<<s2<<" = "<<s3<<endl;
    s3=s1/s2;
    cout<<s1<<" / "<<s2<<" = "<<s3<<endl;
    return 0;
}

c++.2006 个人 Person 类运算符重载

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class Person
{
public:
    string name = "NULL";
    int age = 0;
    double GetAge()
    {
        return (double)age;
    }
    Person operator+ (Person p)
    {
        Person tmp = *this;
        tmp.age += p.age;
        return tmp;
    }
};
istream& operator>> (istream& cin, Person& s)
{
    cin >> s.name >> s.age;
    return cin;
}
ostream& operator<< (ostream& cout, Person& s)
{
    cout << "name=" << s.name << ",age=" << s.age;
    return cout;
}

int main()
{
    int n,i;
    cin>>n;
    Person *person=new Person[n+1];
    for(i=1;i<=n;i++)
        cin>>person[i];
    for(i=0;i<=n;i++)
        cout<<person[i]<<endl;
    for(i=1;i<=n;i++)
        person[0]=person[0]+person[i];
    cout<<"average age:"<<person[0].GetAge()/(double)n<<endl;
    delete[] person;
    return 0;
}

c++.2007 圆类运算符重载

#include<iostream>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Circle
{
public:
    Circle()
    {
        radius = 0.00000;
        area = 0.00000;
    }
    double radius;
    double area;
    double GetArea()
    {
        return area;
    }
    Circle operator+ (Circle c)
    {
        Circle tmp = *this;
        tmp.area += 3.14159 * c.radius * c.radius;
        return tmp;
    }
};
istream& operator>> (istream& cin, Circle& s)
{
    cin >> s.radius;
    return cin;
}
ostream& operator<< (ostream& cout, Circle& s)
{
    cout << "radius=" << s.radius << ",area=" << 3.14159 * s.radius * s.radius;
    return cout;
}

int main()
{
    cout<<fixed<<showpoint<<setprecision(5);
    int n,i;
    cin>>n;
    Circle *c=new Circle[n+1];
    for(i=1;i<=n;i++)
        cin>>c[i];
    for(i=0;i<=n;i++)
        cout<<i<<":"<<c[i]<<endl;
    for(i=1;i<=n;i++)
        c[0]=c[0]+c[i];
    cout<<"total area="<<c[0].GetArea()<<endl;
    delete[] c;
    return 0;
}

c++.2008 分数类运算符重载

注意!本题下方有提示 “分数的输出要求。。。最简形式” 这里即使分子为 0 时,输出仍然不可省略分母部分。。。即使分子等于分母,或者分子分母互为相反数,也只能输出 1/1 或者 -1/1,而不能输出 1 或者 -1。

这题被防了很久。。。我很无语

#include<iostream>
using namespace std;

//你提交的代码在这里
class Fraction {
public:
    int znum;
    int mnum;
    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }
    void yue() {
        if (mnum < 0) {
            znum *= -1;
            mnum *= -1;
        }
        int g = gcd(abs(znum), abs(mnum));
        znum /= g;
        mnum /= g;
        return;
    }
    Fraction operator+ (Fraction f) {
        Fraction tmp;
        tmp.mnum = this->mnum * f.mnum;
        tmp.znum = this->znum * f.mnum + this->mnum * f.znum;
        tmp.yue();
        return tmp;
    }
    Fraction operator- (Fraction f) {
        Fraction tmp;
        tmp.mnum = this->mnum * f.mnum;
        tmp.znum = this->znum * f.mnum - this->mnum * f.znum;
        tmp.yue();
        return tmp;
    }
    Fraction operator* (Fraction f) {
        Fraction tmp = *this;
        tmp.znum *= f.znum;
        tmp.mnum *= f.mnum;
        tmp.yue();
        return tmp;
    }
    Fraction operator/ (Fraction f) {
        Fraction tmp = *this;
        tmp.znum *= f.mnum;
        tmp.mnum *= f.znum;
        tmp.yue();
        return tmp;
    }
};
istream& operator>> (istream& cin, Fraction& s) {
    cin >> s.znum >> s.mnum;
    s.yue();
    return cin;
}
ostream& operator<< (ostream& cout, Fraction& s) {
    cout << s.znum << "/" << s.mnum;
    return cout;
}

int main()
{
    Fraction f1,f2,f3;
    cin>>f1>>f2;
    f3=f1+f2;
    cout<<f1<<" + "<<f2<<" = "<<f3<<endl;
    f3=f1-f2;
    cout<<f1<<" - "<<f2<<" = "<<f3<<endl;
    f3=f1*f2;
    cout<<f1<<" * "<<f2<<" = "<<f3<<endl;
    f3=f1/f2;
    cout<<f1<<" / "<<f2<<" = "<<f3<<endl;
    return 0;
}

c++,2009 整型动态数组类及运算符重载

#include<iostream>
using namespace std;

//你提交的代码在这里
class ARRAY {
private:
    int* p;
    int len;

public:
    friend ostream& operator<< (ostream& cout, ARRAY& s);
    friend istream& operator>> (istream& cin, ARRAY& s);
    ARRAY (int n) {
        len = n;
        p = new int[n];
        for (int i = 0; i < n; i++) {
            p[i] = 0;
        }
    }
    ~ARRAY () {
        delete[] p;
    }
    int& operator[] (int i) {
        return p[i];
    }
    int* operator+ (int i) {
        return p + i;
    }
};
ostream& operator<< (ostream& cout, ARRAY& s) {
    cout << "length=" << s.len << ",element={";
    for (int i = 0; i < s.len; i++) {
        cout << s[i];
        if (i != s.len - 1) {
            cout << ",";
        }
    }
    cout << "}";
    return cout;
}

int main()
{
    int n,i,j,t;
    cin>>n;
    ARRAY a(n);
    cout<<"Initial:"<<a<<endl;
    for(i=0;i<n;i++)
        cin>>a[i];
    cout<<"Before sort:"<<a<<endl;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(a[j]>a[j+1])
            {  t=*(a+j);   *(a+j)=*(a+j+1);  *(a+j+1)=t;   }
    cout<<"After sort:"<<a<<endl;
    return 0;
}

c++.2010 分数类运算符重载(2)

#include<iostream>
using namespace std;

//你提交的代码在这里
class Fraction {
public:
    int znum;
    int mnum;
    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }
    void yue() {
        if (znum == 0) {
            mnum = 1;
            return;
        }
        if (mnum < 0) {
            znum *= -1;
            mnum *= -1;
        }
        int g = gcd(abs(znum), abs(mnum));
        znum /= g;
        mnum /= g;
        return;
    }
    bool operator> (Fraction f) {
        return (znum * f.mnum > mnum * f.znum);
    }
};
istream& operator>> (istream& cin, Fraction& s) {
    cin >> s.znum >> s.mnum;
    s.yue();
    return cin;
}
ostream& operator<< (ostream& cout, Fraction& s) {
    cout << s.znum << "/" << s.mnum;
    return cout;
}

int main()
{
    int i,j,n;
    Fraction t;
    cin>>n;
    Fraction *f=new Fraction[n];
    for(i=0;i<n;i++)
        cin>>f[i];
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(f[j]>f[j+1])
            {   t=f[j];    f[j]=f[j+1];   f[j+1]=t;  }
    cout<<f[0];
    for(i=1;i<n;i++)  cout<<","<<f[i];
    cout<<endl;
    delete[]f;
    return 0;
}

c++.2011 圆类 运算符重载(2)

#include<iostream>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Circle {
public:
    double radius;
    Circle& operator= (double r) {
        radius = r;
        return *this;
    }
    bool operator> (Circle a) {
        return radius > a.radius;
    }
};
ostream& operator<< (ostream& cout, Circle& s) {
    cout << "radius=" << s.radius << ",area=" << 3.14159 * s.radius * s.radius;
    return cout;
}

int main()
{
    int n,i,j;
    double k;
    Circle t;
    cout<<fixed<<showpoint<<setprecision(5);
    cin>>n;
    Circle *c=new Circle[n];
    for(i=0;i<n;i++)
    {
        cin>>k;
        c[i]=k;
    }
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(c[j]>c[j+1])
            {   t=c[j];    c[j]=c[j+1];     c[j+1]=t;   }
    for(i=0;i<n;i++)
        cout<<i+1<<":"<<c[i]<<endl;
    delete[] c;
    return 0;
}

c++.2012 矩形类运算符重载

#include<iostream>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Rectangle {
public:
    double width, height;
    bool operator> (Rectangle& a) {
        return (width * height > a.height * a.width);
    }
};
istream& operator>> (istream& cin, Rectangle& a) {
    cin >> a.width >> a.height;
    return cin;
}
ostream& operator<< (ostream& cout, Rectangle& a) {
    cout << "width=" << a.width << " height=" << a.height << " area=" << a.width * a.height;
    return cout;
}

int main()
{
    int n,i,j;
    Rectangle t;
    cout<<fixed<<showpoint<<setprecision(2);
    cin>>n;
    Rectangle *r=new Rectangle[n];
    for(i=0;i<n;i++)
        cin>>r[i];
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(r[j]>r[j+1])
            { t=r[j];   r[j]=r[j+1];    r[j+1]=t;   }
    for(i=0;i<n;i++)
        cout<<i+1<<":"<<r[i]<<endl;
    delete[] r;
    return 0;
}

c++.2013 日期类运算符重载(2)

这里的题干。。。。。。。。。

#include<iostream>
using namespace std;

//你提交的代码在这里
class Date {
public:
    int year, month, day;
    int mp[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int mr[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    bool isr(int y) {
        return (y % 400 == 0) || (y % 100 != 0 && y % 4 == 0);
    }
    void normalize() {
        while (day > (isr(year) ? mr[month] : mp[month])) {
            day -= (isr(year) ? mr[month] : mp[month]);
            month++;
            if (month > 12) {
                month = 1;
                year++;
            }
        }
        while (day < 1) {
            month--;
            if (month < 1) {
                month = 12;
                year--;
            }
            day += (isr(year) ? mr[month] : mp[month]);
        }
    }
    bool operator> (Date d) {
        if (year != d.year) {
            return year > d.year;
        }
        if (month != d.month) {
            return month > d.month;
        }
        return day > d.day;
    }
};
istream& operator>> (istream& cin, Date& d) {
    cin >> d.year >> d.month >> d.day;
    d.normalize();
    return cin;
}
ostream& operator<< (ostream& cout, Date& d)
{
    cout << d.year << "/" << d.month << "/" << d.day;
    return cout;
}

int main()
{
    int n,i,j;
    Date t;
    cin>>n;
    Date *c=new Date[n];
    for(i=0;i<n;i++)
        cin>>c[i];
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(c[j]>c[j+1])
            {  t=c[j];  c[j]=c[j+1];    c[j+1]=t;    }
    for(i=0;i<n;i++)
        cout<<i+1<<":"<<c[i]<<endl;
    delete[] c;
    return 0;
}

c++.2014 时间类运算符重载(2)

#include<iostream>
using namespace std;

//你提交的代码在这里
class Time {
public:
    int hour;
    int minute;
    int second;
    void normalize() {
        minute += second / 60;
        second %= 60;
        if (second < 0) {
            second += 60;
            minute--;
        }
        hour += minute / 60;
        minute %= 60;
        if (minute < 0) {
            minute += 60;
            hour--;
        }
        while (hour < 0){
            hour += 24;
        }
        hour %= 24;
    }
    bool operator> (Time t) {
        if (hour != t.hour) {
            return hour > t.hour;
        }
        if (minute != t.minute) {
            return minute > t.minute;
        }
        return second > t.second;
    }
    Time& operator= (int x) {
        hour = x / 3600;
        x %= 3600;
        minute = x / 60;
        second = x % 60;
        normalize();
        return *this;
    }
};
ostream& operator<< (ostream& cout, Time& d) {
    cout << d.hour << ":" << d.minute << ":" << d.second;
    return cout;
}

int main()
{
    int n,i,j;
    Time t;
    cin>>n;
    Time *c=new Time[n];
    for(i=0;i<n;i++)
    {
        cin>>j;
        c[i]=j;
    }
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(c[j]>c[j+1])
            {   t=c[j];   c[j]=c[j+1];   c[j+1]=t;  }
    for(i=0;i<n;i++)
        cout<<"("<<i+1<<")"<<c[i]<<endl;
    delete[] c;
    return 0;
}

c++.2015 字符串 string 运算符重载

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class CSTRING {
private:
    char* p = nullptr;
public:
    friend ostream& operator<< (ostream& cout, CSTRING& c);
    friend istream& operator>> (istream& cin, CSTRING& c);
    CSTRING& operator= (CSTRING& c) {
        delete[] p;
        p = new char[strlen(c.p) + 1];
        strcpy(p, c.p);
        return *this;
    }
    bool operator> (CSTRING c) {
        return strcmp(p, c.p) > 0;
    }
};
istream& operator>> (istream& cin, CSTRING& c) {
    string tmp;
    cin >> tmp;
    delete[] c.p;
    c.p = new char [tmp.length() + 1];
    strcpy(c.p, tmp.c_str());
    return cin;
}
ostream& operator<< (ostream& cout, CSTRING& c) {
    cout << c.p;
    return cout;
}

int main()
{
    int n,i,j;
    cin>>n;
    CSTRING t,*cs=new CSTRING[n];
    for(i=0;i<n;i++)
        cin>>cs[i];
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(cs[j]>cs[j+1])
            {  t=cs[j];   cs[j]=cs[j+1];   cs[j+1]=t;   }
    for(i=0;i<n;i++)
        cout<<"("<<i+1<<") "<<cs[i]<<endl;
    delete[] cs;
    return 0;
}

c++.2016 字符串 string 运算符重载(2)

#include<iostream>
#include<cstring>
using namespace std;

//你提交的代码在这里
class CSTRING {
private:
    char* p = nullptr;
public:
    ~CSTRING() {
        if (p != nullptr) {
            delete[] p;
        }
    }
    friend ostream& operator<< (ostream& cout, CSTRING& c);
    friend istream& operator>> (istream& cin, CSTRING& c);
    CSTRING& operator=(CSTRING& c) {
        if (this == &c) return *this;
        delete[] p;
        if (c.p != nullptr) {
            p = new char[strlen(c.p) + 1];
            strcpy(p, c.p);
        } else {
            p = nullptr;
        }
        return *this;
    }
    CSTRING& operator+= (CSTRING& c) {
        if (c.p == nullptr) {
            return *this;
        }
        if (p == nullptr) {
            *this = c;
            return *this;
        }
        char* tmp = new char[strlen(c.p) + strlen(p) + 1];
        strcpy(tmp, p);
        strcat(tmp, c.p);
        delete[] p;
        p = tmp;
        return *this;
    }
};
istream& operator>> (istream& cin, CSTRING& c) {
    string tmp;
    cin >> tmp;
    delete[] c.p;
    c.p = new char [tmp.length() + 1];
    strcpy(c.p, tmp.c_str());
    return cin;
}
ostream& operator<< (ostream& cout, CSTRING& c) {
    cout << c.p;
    return cout;
}

int main()
{
    int n,i;
    cin>>n;
    CSTRING t,*cs=new CSTRING[n];
    for(i=0;i<n;i++)
        cin>>cs[i];
    for(i=0;i<n;i++)
        t+=cs[i];
    cout<<t<<endl;
    delete[] cs;
    return 0;
}

c++.2017 矩形类运算符重载(2)

#include<iostream>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Rectangle {
public:
    double width, height;
    bool operator> (Rectangle& a) {
        return (width * height > a.height * a.width);
    }
};
double operator+ (double s, Rectangle& a) {
    return (s + a.width * a.height);
}
istream& operator>> (istream& cin, Rectangle& a) {
    cin >> a.width >> a.height;
    return cin;
}
ostream& operator<< (ostream& cout, Rectangle& a) {
    cout << "width=" << a.width << ",height=" << a.height << ",area=" << a.width * a.height;
    return cout;
}

int main()
{
    int n,i,j;
    double sum=0;
    cout<<fixed<<showpoint<<setprecision(2);
    cin>>n;
    Rectangle *rect=new Rectangle[n];
    for(i=0;i<n;i++)
        cin>>rect[i];
    for(i=0;i<n;i++)
        sum=sum+rect[i];
    for(i=0;i<n;i++)
        cout<<"("<<i+1<<")"<<rect[i]<<endl;
    cout<<"total area="<<sum<<endl;
    delete[] rect;
    return 0;
}

c++.2018 复数类运算符重载(2)

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Complex {
public:
    double real;
    double imag;
    bool operator> (Complex c) {
        return real * real + imag * imag > c.real * c.real + c.imag * c.imag;
    }
    Complex& operator= (Complex c) {
        real = c.real;
        imag = c.imag;
        return *this;
    }
};
istream& operator>> (istream& cin, Complex& a) {
    cin >> a.real >> a.imag;
    return cin;
}
ostream& operator<< (ostream& cout, Complex& c) {
    cout << "Modulus=" << sqrt(c.real * c.real + c.imag * c.imag) << "(";
    if (c.imag == 0) cout << c.real;
    else if (c.real == 0 && c.imag == 1) cout << "i";
    else if (c.real == 0 && c.imag == -1) cout << "-i";
    else if (c.real == 0) cout << c.imag << "i";
    else if (c.imag == 1) cout << c.real << "+i";
    else if (c.imag == -1) cout << c.real << "-i";
    else {
        if (c.imag > 0) cout << c.real << "+" << c.imag << "i";
        else cout << c.real << c.imag << "i";
    }
    cout << ")";
    return cout;
}

int main()
{
    int i,j,n;
    Complex t;
    cout<<fixed<<showpoint<<setprecision(5);
    cin>>n;
    Complex *c=new Complex[n];
    for(i=0;i<n;i++)
        cin>>c[i];
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(c[j]>c[j+1])
            {   t=c[j];    c[j]=c[j+1];   c[j+1]=t;  }
    for(i=0;i<n;i++)
        cout<<"("<<i+1<<")"<<c[i]<<endl;
    delete[]c;
    return 0;
}

c++.2019 学生类运算符重载(2)

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Student
{
public:
    int id;
    string name;
    int score;
    bool operator> (Student s)
    {
        if (this->score == s.score) return this->id > s.id;
        else return this->score > s.score;
    }
};
int operator+ (int a, Student s) {
    return a + s.score;
}
istream& operator>> (istream& cin, Student& s)
{
    cin >> s.id >> s.name >> s.score;
    return cin;
}
ostream& operator<< (ostream& cout, Student& s)
{
    cout << "id=" << s.id << ",name=" << s.name << ",score=" << s.score;
    return cout;
}

int main()
{
    cout<<fixed<<showpoint<<setprecision(5);
    int i,j,n,sum=0;
    cin>>n;
    Student *stu=new Student[n];
    for(i=0;i<n;i++)
        cin>>stu[i];
    for(i=0;i<n;i++)
    {
        cout<<"("<<i+1<<")"<<stu[i]<<endl;
        sum=sum+stu[i];
    }
    cout<<"average score="<<sum*1.0/n<<endl;
    delete[]stu;
    return 0;
}

c++.2020 个人 Person 类运算符重载(2)

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;

//你提交的代码在这里
class Person {
public:
    string name = "NULL";
    int age = 0;
    bool operator> (Person p) {
        if (age != p.age) {
            return age > p.age;
        }
        return name > p.name;
    }
    Person& operator= (Person p) {
        name = p.name;
        age = p.age;
        return *this;
    }
};
istream& operator>> (istream& cin, Person& s) {
    cin >> s.name >> s.age;
    return cin;
}
ostream& operator<< (ostream& cout, Person& s) {
    cout << "name=" << s.name << ",age=" << s.age;
    return cout;
}

int main()
{
    int n,i,j;
    Person t;
    cin>>n;
    Person *person=new Person[n];
    for(i=0;i<n;i++)
        cin>>person[i];
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(person[j]>person[j+1])
            { t=person[j];   person[j]=person[j+1];   person[j+1]=t;   }
    for(i=0;i<n;i++)
        cout<<"("<<i+1<<")"<<person[i]<<endl;
    delete[] person;
    return 0;
}

c++.CSTRING 类的设计

#include<iostream>
#include<cstring>
using namespace std;

/* 你提交的代码在这里 */
class CSTRING {
public:
     char* p = nullptr;
     ~CSTRING() {
        if (p != nullptr) {
            delete[] p;
        }
     }
     CSTRING() {
        p = nullptr;
     }
     CSTRING(const CSTRING& other) {
        p = new char[strlen(other.p)+1];
        strcpy(p, other.p);
     }
     const char* GetData() const{
        return p ? p : "";
     }
     void Set (const char* s) {
        if (p != nullptr) {
            delete[] p;
        }
        p = new char[strlen(s) + 1];
        strcpy(p, s);
     }
     void Show() const{
        cout << p << endl;
     }
     CSTRING& operator= (const char* s) {
        if (p != nullptr) {
            delete[] p;
        }
        p = new char[strlen(s) + 1];
        strcpy(p, s);
        return *this;
     }

     CSTRING& operator= (const CSTRING& c) {
        if (p != nullptr) {
            delete[] p;
        }
        p = new char[strlen(c.p) + 1];
        strcpy(p, c.p);
        return *this;
     }
     CSTRING& operator+= (const CSTRING& c) {
        const char* tt = p ? p : "";
        char* tmp = new char[strlen(c.p) + strlen(tt) + 1];
        strcpy(tmp, tt);
        strcat(tmp, c.p);
        if (p != nullptr) {
            delete[] p;
        }
        p = tmp;
        return *this;
     }
     bool operator> (const CSTRING& c) {
        return strcmp(this->p, c.p) > 0;
     }
     CSTRING operator+ (const CSTRING& c) {
        CSTRING tmp;
        if (c.p == nullptr) {
            return *this;
        }
        tmp.p = new char[strlen(c.p) + strlen(p) + 1];
        strcpy(tmp.p, p);
        strcat(tmp.p, c.p);
        return tmp;
     }
     char& operator[] (int i) {
        return p[i];
     }
};
istream& operator>> (istream& cin, CSTRING& c) {
    string tmp;
    cin >> tmp;
    if (c.p != nullptr) {
        delete[] c.p;
    }
    c.p = new char[tmp.length() + 1];
    strcpy(c.p, tmp.c_str());
    return cin;
}
ostream& operator<< (ostream& cout, CSTRING& c) {
    cout << (c.p ? c.p : "");
    return cout;
}

int main()
{
    CSTRING t;
    cout<<"Length of string:"<<strlen(t.GetData())<<endl;
    t.Set("This is an example");
    t.Show();
    cout<<"Length of string:"<<strlen(t.GetData())<<endl;
    t="Sample";
    cout<<t<<endl;
    int n,i;
    cin>>n;
    CSTRING s,*cs;
    cs=new CSTRING[n];
    for(i=0;i<n;i++)
    {
        cin>>cs[i];
        s+=cs[i];
    }
    for(i=0;i<n;i++)
        cout<<"("<<i+1<<") "<<cs[i]<<endl;
    cout<<s<<endl;

    int j;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(cs[j]>cs[j+1])
            {  t=cs[j];   cs[j]=cs[j+1];   cs[j+1]=t;   }

    for(i=0;i<n;i++)
        cout<<"("<<i+1<<") "<<cs[i]<<endl;
    t[0]='\0';

    for(i=0;i<n;i++)
    {
        t=cs[i]+t;
    }
    cout<<t<<endl;
    delete[] cs;
    return 0;
}

c++.3001 日期类(由时间类派生)

#include<iostream>
using namespace std;

//你提交的代码在这里
class CTime {
private:
    int hour;
    int minute;
    int second;
public:
    CTime() {
        hour = 9;
        minute = 10;
        second = 11;
        cout << "Function #1 is called!" << endl;
    }
    CTime(int h, int mi, int s) {
        hour = h;
        minute = mi;
        second = s;
        cout << "Function #2 is called!" << endl;
    }
    CTime(const CTime& c) {
        hour = c.hour;
        minute = c.minute;
        second = c.second;
        cout << "Function #0 is called!" << endl;
    }
    void Show() {
        cout << hour << ":" << minute << ":" << second << endl;
        cout << "Function #3 is called!" << endl;
    }
};
class CDate : public CTime {
private:
    int year;
    int month;
    int day;
public:
    CDate() {
        year = 2023;
        month = 4;
        day = 5;
        cout << "Function #4 is called!" << endl;
    }
    CDate(int y, int m, int d) {
        year = y;
        month = m;
        day = d;
        cout << "Function #5 is called!" << endl;
    }
    CDate(int y, int m, int d, int h, int mi, int s) : CTime(h, mi, s) {
        year = y;
        month = m;
        day = d;
        cout << "Function #6 is called!" << endl;
    }
    CDate(int y, int m, int d, CTime& t) : CTime(t) {
        year = y;
        month = m;
        day = d;
        cout << "Function #7 is called!" << endl;
    }
    CDate(CTime& t) : CTime(t) {
        year = 2000;
        month = 12;
        day = 31;
        cout << "Function #8 is called!" << endl;
    }
    void Show() {
        cout << year << "-" << month << "-" << day << " ";
        CTime::Show();
        cout << "Function #9 is called!" << endl;
    }
};

int main()
{
    int dy,dm,dd,th,tm,ts;
    cin>>dy>>dm>>dd>>th>>tm>>ts;
    CTime t1;
    cout<<"[T1]";    t1.Show();
    CDate d1;
    cout<<"[D1]";    d1.Show();
    CDate d2(dy,dm,dd);
    cout<<"[D2]";    d2.Show();
    CDate d3(dy,dm,dd,th,tm,ts);
    cout<<"[D3]";    d3.Show();
    CDate d4(dy,dm,dd,t1);
    cout<<"[D4]";    d4.Show();
    CDate d5(t1);
    cout<<"[D5]";    d5.Show();
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值