声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,求出大数和小数。
#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;
}