一、思维导图
二、设计一个Per类
类中包含私有成员:姓名、年龄、指针成员身高、体重,再设计一个Stu类,类中包含私有成员:成绩、Per类对象p1,设计这两个类的构造函数、析构函数和拷贝构造函数。
#include <iostream>
using namespace std;
class Per
{
private:
string name;
int age;
double *height;
double *weight;
public:
Per()
{ /*无参构造函数*/
height = nullptr;
weight = nullptr;
cout << "Per::无参构造" << endl;
}
Per(string name, int age, double height, double weight):\
name(name), age(age), height(new double(height)), weight(new double(weight))
{ /*有参构造函数*/
cout << "Per::有参构造" << endl;
}
Per(const Per &other):name(other.name), age(other.age), height(new double(*(other.height))), \
weight(new double(*(other.weight)))
{ /*拷贝构造函数*/
cout << "Per::拷贝构造" << endl;
}
~Per()
{ /*析构函数*/
delete height;
delete weight;
cout << "Per::析构函数" << endl;
}
void show()
{
cout << "姓名:" << name << " 年龄:" << age <<\
" 身高:" << *height << " 体重:" << *weight << endl;
}
};
class Stu
{
private:
double score;
Per p1;
public:
Stu()
{ /*无参构造函数*/
cout << "Stu::无参构造" << endl;
}
Stu(double score, string name, int age, double height, double weight):\
score(score), p1(name, age, height, weight)
{ /*有参构造函数*/
cout << "Stu::有参构造" << endl;
}
Stu(const Stu &other):score(other.score), p1(other.p1)
{ /*拷贝构造函数*/
cout << "Stu::拷贝构造" << endl;
}
~Stu()
{ /*析构函数*/
cout << "Stu::析构函数" << endl;
}
void show()
{
p1.show();
cout << "成绩:" << score << endl;
}
};
int main()
{
Stu s1;
cout << "__________" << endl;
Stu s2(99.99, "马嘉祺", 21, 173.2, 54.73);
s2.show();
cout << "__________" << endl;
Stu s3(s2);
s3.show();
cout << "__________" << endl;
return 0;
}