C++实验: 对象的赋值与复制(大学生平时作业版)

C++实验: 对象的赋值与复制

一、实验目的

1)理解对象的赋值和复制操作的含义,以及由此操作产生的指针悬挂产生的原因。掌握对象的赋值与复制方法。

2)掌握复制构造函数的定义方法。

3)了解对象的赋值与复制操作的异同。

实验内容

1.声明一个时间类,时间类中有3个私有数据成员(HourMinuteSecond)和两个公有成员函数(SetTimePrintTime)。SetTime根据传递的3个参数为对象设置时间;PrintTime负责将对象表示的实践显示输出,输出格式为“Hour:Minute:Second”

1)在主函数中,建立一个时间类对象,设置时间为92030秒并显示该时间。

2)使用构造函数代替上面的SetTime成员函数,并在主函数中使用构造函数设置时间为104050秒,并显示该时间。

3)重载时间类的构造函数(不带参数)使小时、分、秒均为0

4)在时间类的析构函数中输出Goodbye!”

5)定义拷贝构造函数并调用。

2.创建一个对象数组,数组的元素是学生对象,学生的信息包括学号、姓名和成绩,main函数中将数组元素按学生成绩从小到大的顺序进行排序并显示。

三、程序代码

1.

#include<iostream>

using namespace std;

class Time

{

public:

    Time()

    {

        cout << "无参构造函数被调用" << endl;

        Hour = 0;

        Minute = 0;

        Second = 0;

    }

    Time(int x, int y, int z)

    {

        cout << "有参构造函数被调用" << endl;

        if (x > 23 || x < 0)

            cout << "输入错误,小时应为0-23之间" << endl;

        else

            Hour = x;

        if (y > 59 || y < 0)

            cout << "输入错误,分钟应为0-59之间" << endl;

        else

            Minute = y;

        if (z > 59 || z < 0)

            cout << "输入错误,秒应为0-59之间" << endl;

        else

            Second = z;

    }

    void SetTime()

    {

        cout << "请输入小时:";

        cin >> Hour;

        cout << "请输入分钟:";

        cin >> Minute;

        cout << "请输入秒:";

        cin >> Second;

    }

    void PrintTime()

    {

        cout << "输出时间为:" << Hour << ":" << Minute << ":" << Second << endl;

    }

private:

    int Hour, Minute, Second; //声明成员Hour,Minute,Second分别表示小时,分钟,秒

};

int main()

{

    Time time;

    time.SetTime();

    cout << "你所输入的时间为:" << endl;

    time.PrintTime();

    Time T(10, 40, 50);

    cout << "构造函数时间为:" << endl;

    T.PrintTime();

    Time copy = T;

    cout << "拷贝构造函数被调用" << endl;

    copy.PrintTime();

    Time();

    cout << "Good bye!" << endl;

    return 0;

}

2

#include <iostream>

#include <algorithm> // 用于 std::sort

// 定义一个学生类

class Student {

public:

    int id;       // 学号

    std::string name; // 姓名

    float score;  // 成绩

    // 构造函数

    Student(int id, std::string name, float score) : id(id), name(name), score(score) {}

    // 用于排序的比较函数

    static bool compareByScore(const Student& s1, const Student& s2) {

        return s1.score < s2.score; // 升序排序

    }

};

int main() {

    // 创建学生对象数组

    Student students[] = {

        Student(1, "Alice", 88.5),

        Student(2, "Bob", 92.0),

        Student(3, "Charlie", 85.5),

        Student(4, "David", 91.0)

    };

    int n = sizeof(students) / sizeof(students[0]); // 计算数组长度

    // 使用 std::sort 进行排序,传入比较函数

    std::sort(students, students + n, Student::compareByScore);

    // 输出排序后的学生信息

    for (int i = 0; i < n; i++) {

        std::cout << "ID: " << students[i].id

            << ", Name: " << students[i].name

            << ", Score: " << students[i].score << std::endl;

    }

    return 0;

}

四、扩展练习

定义一个点类Point,并定义成员函数doubleDistance(const&Point)求两点的距离。

#include <iostream>

#include <cmath>

using namespace std;

class Point {

private:

    double x, y;  // 点的 x  y 坐标

public:

    Point(double x = 0.0, double y = 0.0) : x(x), y(y) {}

    double doubleDistance(const Point& p) const {

        return std::sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));

    }

};

int main() {

    Point p1(4, 0), p2(3, 4);

    double distance = p1.doubleDistance(p2);

    std::cout << "两点的距离为: " << distance << std::endl;

    return 0;

}

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何时还春风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值