C++day4

1.思维导图

2.设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高、体重,再设计一个Stu类,类中包含私有成员:成绩、Per类对象p1,设计这两个类的构造函数、析构函数和拷贝构造函数、拷贝赋值函数。

cpp 复制代码
#include <iostream>

using namespace std;
class Per
{
    friend class Stu;
private:
    string name;
    int age;
    int *height;
    int *weight;
public:
    Per()//per的无参构造函数
    {
        cout  <<"Per的无参构造函数" << endl;
    }
    Per(string name,int age,int height,int weight):name(name),age(age),height(new int(height)),weight(new int(weight))//Per的有参构造函数,并使用初始化列表初始化
    {
        cout << "Per的有参构造函数" << endl;
    }
    Per(const Per &other):name(other.name),age(other.age),height(new int (*other.height)),weight(new int (*other.weight))//Per的拷贝构造函数
    {
        cout << "Per的拷贝构造函数" << endl;
    }
    Per &operator=(const Per &other)//Per的拷贝赋值函数
    {
        if(this!=&other)//避免自己给自己赋值
        {
            name=other.name;
            age=other.age;
            height=new int(*(other.height));
            weight=new int(*(other.weight));
        }
        cout << "Per的拷贝赋值函数" <<endl;
        return *this;
    }
    ~Per()
    {
        cout << "Per的析构函数" << endl;
        delete weight;
        delete height;
        weight=nullptr;
        height=nullptr;

    }
    void show()
    {
        cout << name  << " " << age << " " << *height << " " << *weight << endl;
    }
};

class Stu
{
private:
    double score;
    Per p1;
public:
    Stu()//Stu的无参构造函数
    {
         cout << "Stu的无参构造函数" << endl;

    }
    Stu(double score,Per &p1):score(score),p1(p1)//Stu的有参构造函数
    {
        cout << "Stu的有参构造函数" << endl;
    }
    Stu(const Stu &other):score(other.score),p1(other.p1)//Stu的拷贝构造函数
    {
        cout << "Stu的拷贝构造函数" << endl;
    }
    Stu &operator=(const Stu &other)//Stu的拷贝赋值函数
    {
        if(this!=&other)
        {
            score=other.score;
            p1=other.p1;
        }
        return *this;
        cout << "Stu的拷贝赋值函数" << endl;
    }
    ~Stu()
    {
         cout << "Stu的析构函数" << endl;
    }
    void show()
    {
        cout << score << " " <<p1.name  << " " << p1.age << " " << *p1.height << " " << *p1.weight << endl;//这里要访问Per类里private里的成员所以要在Per类增加友元
    }
};
int main()
{
    Per s1;//调用Per无参构造函数
    Per s2("张三",18,180,75);//调用Per有参构造函数
    Per s3(s2);//调用Per的拷贝构造函数
    Per s4;
    s4=s3;//调用Per的拷贝赋值函数
    s4.show();
    cout << "--------------------------------" << endl;
    Stu b1;//stu无参构造函数
    Stu b2(100,s2);//stu有参构造函数
    Stu b3(b2);//stu拷贝构造函数
    Stu b4;
    b4=b3;//stu拷贝赋值函数
    b4.show();

    return 0;
}
相关推荐
行者9623 分钟前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon33 分钟前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio1 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词1 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派1 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
yeziyfx2 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie1145141912 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
古城小栈2 小时前
Rust 网络请求库:reqwest
开发语言·网络·rust
hqwest3 小时前
码上通QT实战12--监控页面04-绘制6个灯珠及开关
开发语言·qt·qpainter·qt事件·stackedwidget
i橡皮擦3 小时前
TheIsle恐龙岛读取游戏基址做插件(C#语言)
开发语言·游戏·c#·恐龙岛·theisle