定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算符、逻辑运算符、自增自减运算符、插入/提取运算符)
#include <iostream>
using namespace std;
class Person{
int age;
string &name;
public:
Person(string &name):age(15),name(name){}
Person(int age, string &name):age(age),name(name){}
~Person(){
cout << "Person的析构函数" << endl;
}
Person(const Person &other):age(other.age),name(other.name){}
Person &operator=(const Person &other){
age = other.age;
name = other.name;
return *this;
}
Person operator+(const Person other){
string tempname = name + other.name;
int tempage = age + other.age;
return Person(tempage, tempname);
}
bool operator==(const Person other){
return age==other.age && name==other.name;
}
bool operator>=(const Person other){
return age>=other.age && name>=other.name;
}
Person operator++(){
age++;
return *this;
}
Person operator++(int){
return Person(age++, name);
}
Person operator--(){
age--;
return *this;
}
Person operator--(int){
return Person(age--, name);
}
friend istream &operator>>(istream &cin, Person &p);
friend ostream &operator<<(ostream &cout, Person &p);
};
istream &operator>>(istream &cin, Person &p){
cin >> p.age >> p.name;
return cin;
}
ostream &operator<<(ostream &cout, Person &p){
cout << "age=" << p.age << ", name=" << p.name;
return cout;
}
class Stu{
double * const score;
public:
Stu():score(new double(12.0)){}
Stu(double score):score(new double(score)){}
~Stu(){
delete score;
cout << "Stu的析构函数" << endl;
}
Stu(Stu &other):score(new double(*(other.score))){}
Stu &operator=(Stu &other){
*score = *other.score;
return *this;
}
void show(){
cout << *score << endl;
}
};
int main()
{
string name1 = "a";
Person p1(name1);
cin >> p1;
Person p2 = p1;
cout << p2 << endl;
p2++;
cout << p2 << endl;
string name2 = "b";
Person p3(name2);
cout << p3 << endl;
p3 = p2 + p1;
cout << boolalpha << (p2 == p1) << endl;
cout << (p2 >= p1) << endl;
cout << p3 << endl;
cout << "-----------" << endl;
Stu s1;
s1.show();
Stu s2(16.5);
s2.show();
Stu s3 = s2;
s3.show();
s2 = s1;
s2.show();
return 0;
}
思维导图