【0823作业】C++:实现类嵌套,以及其构造函数、析构函数和拷贝构造函数

要求:

设计一个Per类。类中包含私有成员:姓名、年龄、指针成员身高、体重;

再设计一个Stu类,类中包含私有成员:成绩、Per类对象 p1;

设计这两个类的构造函数、析构函数和拷贝构造函数。

cpp 复制代码
#include <iostream>

using namespace std;
class Per
{
    string name; //姓名
    int age;     //年龄
    int *h;      //身高
    int *w;      //体重
public:
    Per():h(new int),w(new int)//在不传参的情况下,给指针成员h、w用堆区的空间初始化
    {
        cout << "Per无参构造" << endl;
    }
    Per(int h,int w):h(new int(h)),w(new int (w)) //在参数为整型变量的情况下,让h、w指向堆区申请的空间
    //但是把这片空间的内容,用传过来的整型变量h、w初始化
    {
        cout << "Per的有参构造" << endl;
    }
    //获取姓名赋值到结构体中
    void get_name(string name);
    //获取年龄赋值到结构体中
    void get_age(int age);

    //析构函数
    ~Per()
    {
        //在析构之前释放堆区空间
        cout << "准备释放空间:" << h << endl;
        cout << "准备释放空间:" << w << endl;
        delete h;
        delete w;
        h = nullptr;
        w = nullptr;
        cout << "Per的析构函数" << endl;
    }

    void show_Msg();  //输出信息

    //拷贝构造函数
    Per(Per &other)
    {
        this->name = other.name;
        this->age = other.age;
        h = new int;
        w = new int;
        *h = *(other.h);
        *w = *(other.w);
        cout << "Per的拷贝构造函数" << endl;
    }
};
class Stu
{
    float score;
    Per p1;
public:
    //void get_score();
    Stu()
    {
        cout << "Stu的无参构造函数" << endl;
    }
    Stu(float score,Per p1)
    {
        this->p1=p1;
        this->score = score;
        cout << "Stu的有参构造函数" << endl;
    }
    ~Stu()
    {
        //在析构之前释放堆区的空间
        cout << "Stu的析构函数" << endl;
    }
    Stu(Stu &other):score(other.score),p1(other.p1)
    {
        cout << "Stu的拷贝构造函数" << endl;
    }
    //输出信息
    void show_Stu_Msg();
};

//--------------------------------主函数------------------------------------
int main()
{
    Per s;          //无参构造
    Per s1(180,50); //有参构造,传递h和w的值
    s1.get_name("zhangsan"); //赋值
    s1.get_age(18);          //赋值
    s1.show_Msg();           //赋值

    Per s2 = s1;    //申请了一个Per的类对象,将s1的值初始化给s2
    s2.show_Msg();

    Stu p;         //无参构造
    Stu z1(98,s1); //有参构造
    z1.show_Stu_Msg(); //输出z1中的信息(float、Per p1)
    return 0;
}

//---------------------------------函数-------------------------------------
void Per::get_name(string name)//获取姓名赋值到结构体中
{
    this->name = name;
    cout << "姓名已保存: " << this->name << endl;
}

void Per::get_age(int age)    //获取年龄赋值到结构体中
{
    this->age = age;
    cout << "年龄已保存: " << this->age << endl;
}

void Per::show_Msg()//输出Per信息
{
    cout << "姓名:"<<name << " 年龄:"<<age << " 身高:"<<*h << " 体重:"<<*w << endl;
}

void Stu::show_Stu_Msg()//输出Stu信息
{
    p1.show_Msg();
    cout << "成绩为: " << score << endl;
}
相关推荐
懒惰才能让科技进步14 分钟前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
DARLING Zero two♡18 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
7年老菜鸡19 分钟前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Gu Gu Study20 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
Ni-Guvara28 分钟前
函数对象笔记
c++·算法
似霰32 分钟前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
芊寻(嵌入式)42 分钟前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
獨枭44 分钟前
C++ 项目中使用 .dll 和 .def 文件的操作指南
c++
霁月风1 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
橘色的喵1 小时前
C++编程:避免因编译优化引发的多线程死锁问题
c++·多线程·memory·死锁·内存屏障·内存栅栏·memory barrier