定义一个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 ;
}
思维导图