- 设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高、体重,再设计一个Stu类,类中包含私有成员:成绩、Per类对象 p1,设计这两个类的构造函数、析构函数和拷贝构造函数。
#include <iostream>
using namespace std;
class Per
{
string name;
int age;
int *hight;
int *weight;
public:
void my_set(string name,int age)
{
this-> name = name;
this-> age = age;
}
void show()
{
cout <<"名字为:" << name << ' ' << "成绩为:" << age << ' ';
cout << "身高为:" << *hight << ' ' << "体重为:" << *weight << endl;
}
Per(int *h,int *w):hight(new int),weight(new int)
{
hight=h;
weight=w;
cout << "这是Per的构造函数" << endl;
}
Per(Per &other)
{
int *hi=new int;
int *we=new int;
*hi = *(other.hight);
*we = *(other.weight);
cout << "这是Per的拷贝构造函数" << endl;
}
~Per()
{
cout << "这是Per的解析函数" << endl;
delete hight;
delete weight;
hight = nullptr;
weight = nullptr;
}
};
class Stu
{
int score;
public:
Per p1;
void set_stu(int score)
{
this->score=score;
}
void show()
{
cout << "成绩为:" << score << endl;
}
Stu(int *hight,int *weight):p1(hight,weight)
{
cout << "这是Stu的构造函数" << endl;
}
Stu(Stu &other):p1(other.p1)
{
this ->score = other.score;
p1=other.p1;
cout << "这是Stu的拷贝构造函数" << endl;
}
~Stu()
{
cout << "这是Stu的解析函数" <<endl;
p1.~Per();
}
};
int main()
{
int *hight=new int;
*hight = 183;
int *weight=new int;
*weight = 120;
Stu s1(hight,weight);
s1.p1.my_set("张三",18);
s1.p1.show();
s1.set_stu(89);
s1.show();
*hight = 180;
*weight = 110;
Stu s2(hight,weight);
s2.p1.my_set("李四",20);
s2.p1.show();
s2.set_stu(90);
s2.show();
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/ae35f32bdd7075f3ebb2610ea96cf56c.png)