0
点赞
收藏
分享

微信扫一扫

【C++】典型例题汇总

非宁静不致远 2022-04-13 阅读 59
c++

声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。

#include <iostream>
using namespace std;

template<class numtype>
class Compare {
public:
    Compare(numtype x, numtype y) {
        X = x;
        Y = y;
    }
    numtype max() {
        return (X > Y) ? X : Y;
    }
    numtype min() {
        return (X < Y) ? X : Y;
    }
private:
    numtype X, Y;
};

int main() {
    Compare<int> cmp1(3, 7);
    cout << cmp1.max() << endl;
    cout << cmp1.min() << endl;

    Compare<float> cmp2(45.78, 93.6);
    cout << cmp2.max() << endl;
    cout << cmp2.min() << endl;

    Compare<char> cmp3('a', 'A');
    cout << cmp3.max() << endl;
    cout << cmp3.min() << endl;

    return 0;
}

定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算分两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。例如:c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。编写一个程序,分别求两个复数之和、整数和复数之和。

#include <iostream>
using namespace std;

class Complex {
public:
    Complex() {
        Real = 0;
        Imag = 0;
    }
    Complex(double real, double imag) {
        Real = real;
        Imag = imag;
    }
    friend Complex operator+(Complex &num1, Complex &num2);
    friend Complex operator+(Complex &num1, int &num2);
    friend Complex operator+(int &num1, Complex &num2);
    void display();
private:
    double Real;
    double Imag;
};

// Complex + Complex
Complex operator+(Complex &num1, Complex &num2) {
    return Complex(num1.Real + num2.Real, num1.Imag + num2.Imag);
}

// Complex + int
Complex operator+(Complex &num1, int &num2) {
    return Complex(num1.Real + num2, num1.Imag);
}

// int + Complex
Complex operator+(int &num1, Complex &num2) {
    return Complex(num1 + num2.Real, num2.Imag);
}

void Complex::display() {
    cout << "(" << Real << "," << Imag << "i)" << endl;
}

int main() {
    Complex num1(3, 4), num2(5, -10), num3;
    int num = 5;

    // Complex + Complex
    num3 = num1 + num2;
    num3.display();

    // Complex + int
    num3 = num1 + num;
    num3.display();

    // int + Complex
    num3 = num + num1;
    num3.display();

    return 0;
}

定义一个人员类Person,包括数据成员:姓名、编号、性别和用于输入输出的成员函数。在此基础上派生出学生类Student(增加成绩)和老师类Teacher(增加教龄),并实现对学生和教师信息的输入输出。

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

class Person {
public:
    void SetData(char* name, char* id, bool sex = 1) {
        int len = strlen(name); // strlen要用char*
        strncpy(Name, name, len); // char数组要用strncpy进行拷贝
        Name[len] = '\0'; // 要将最后一位置为'\0'

        len = strlen(id);
        strncpy(Id, id, len);
        Id[len] = '\0';

        Sex = sex;
    }
    void Output() {
        cout << "Name:" << Name << endl;
        cout << "Id:" << Id << endl;
        const char *str = Sex ? "Male" : "Female"; // 注意这里用const char*
        cout << "Sex:" << str << endl;

    }
private:
    char Name[20];
    char Id[20];
    bool Sex;
};

class Student: public Person {
public:
    void InputScore(double score1, double score2, double score3) {
        Score[0] = score1;
        Score[1] = score2;
        Score[2] = score3;
    }
    void Print() {
        Output();
        for (int i = 0; i < 3; i++) {
            cout << "Score" << i + 1 << ":" << Score[i] << endl;
        }
    }
private:
    double Score[3];
};

class Teacher: public Person {
public:
    void Inputage(double age) {
        Age = age;
    }
    void Print() {
        Output();
        cout << "age:" << Age << endl;
    }
private:
    double Age;
};

int main() {
    Student stu;
    Teacher tea;

    stu.SetData("张三", "21020211");
    stu.InputScore(90, 80, 85);
    stu.Print();
    cout << endl;

    tea.SetData("李四", "001");
    tea.Inputage(12);
    tea.Print();

    return 0;
}

设计一个Time类,包括三个私有数据成员:hour,minutes,second,用构造函数初始化,内设公共函数display(Date &d),设计一个Date类,包括三个私有数据成员:month,day,year,也用构造函数初始化。分别定义两个带参数的对象time(12,30,55),date(3,25,2010),通过友元成员函数的应用,输出date和time的值。

#include <iostream>
using namespace std;

class Date; // 提前声明Date!
class Time {
public:
    Time(int hour, int minutes, int second) {
        Hour = hour;
        Minutes = minutes;
        Second = second;
    }
    void display(Date &date);
private:
    int Hour;
    int Minutes;
    int Second;
};

class Date {
public:
    Date(int day, int month, int year) {
        Day = day;
        Month = month;
        Year = year;
    }
    friend void Time::display(Date &date);
private:
    int Day;
    int Month;
    int Year;
};

// 注意虽然已经定义了友元函数,但是这个函数一定要放在友元函数声明之后,否则找不到Month,Day,Year
void Time::display(Date &date) {
    cout << date.Month << "/" << date.Day << "/" << date.Year << endl;
    cout << Hour << ":" << Minutes << ":" << Second << endl;
}

int main() {
    Time time(12, 30, 55);
    Date date(3, 25, 2010);

    time.display(date); // 注意这里的调用方法

    return 0;
}
举报

相关推荐

0 条评论