实训3:C++ 面向对象 - 构造函数与析构函数

本文介绍了C++中构造函数和析构函数的概念与使用,包括如何初始化成员、管理对象数组以及静态成员在资源共享中的应用。通过三个实训任务,展示了如何设计学生类、管理学生信息表和模拟共享书店场景,强调了静态成员在多个对象间共享数据的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实训3:C++ 面向对象 - 构造函数与析构函数

参考代码 by 小喾苦
答案仅供参考!



第1关:构造函数 —— 学生信息类

任务描述

本关任务:设计一个带有构造函数和析构函数的学生类。

相关知识

构造函数、析构函数与赋值函数是每个类最基本的函数。他们太普通以致让人容易麻痹大意,其实这些貌似简单的函数在使用时要特别注意以免造成不必要资源浪费和产生意想不到的错误。

每个类只有一个析构函数和一个赋值函数,但是可以有多个构造函数(包含一个拷贝构造函数,其他的成为普通构造函数)。

下面我们就一起来学习构造函数和析构函数的基本使用。

构造函数

所谓构造函数,就是在对象构造的时候调用的函数。构造函数是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。

构造函数在定义类对象时自动调用,不需用户调用,也不能被用户调用。在对象使用前调用。如果类中没有定义构造函数,系统则会自动给出一个无参构造函数。

构造函数没有返回值,函数名必须与类名一致,一个类可以有多个构造函数,但是参数必须有差别(也就是所谓的重载)。

例如:

class Test
{
   
    public:
        Test();     // 无参数的构造函数
        Test(int a);     // 有一个 int 参数的构造函数
    private:
        Test(int a,int b);     // 私有的两个参数的构造函数
};
Test::Test()
{
    /* 此处省略一些初始化的工作 */}
Test::Test(int a)
{
    /* …… */}
Test::Test(int a,int b)
{
    /* …… */}

构造函数也会受访问性影响,在不同的作用范围,能调用的构造函数也会不同。

初始化成员

构造函数的一个重要任务就是给成员初始化,初始化成员有两种办法,一种是手动给成员赋值,另一种是使用初始化列表。这里介绍第二种,格式为:

类名::构造函数名(参数表): (成员初始化表){
    构造函数体 }

构造函数中的初始化列表只需要在参数列表的后面加一个冒号:),然后将要初始化的成员按照成员名(参数)的格式排列在后面,个成员之间用逗号隔开。

例如:

class Test
{
   
    public:
        Test();     // 无参数的构造函数
        Test(int a);     // 有一个 int 参数的构造函数
    private:
        Test(int a,int b);     // 私有的两个参数的构造函数
};
Test::Test()
{
    /* 此处省略一些初始化的工作 */}
Test::Test(int a)
{
    /* …… */}
Test::Test(int a,int b)
{
    /* …… */}

其中成员的初始化顺序不是按照初始化列表中的顺序来的,而是按照成员声明的顺序来的,例如:

class Test
{
   
    public:
        Test();     // 无参数的构造函数
        Test(int a);     // 有一个 int 参数的构造函数
    private:
        Test(int a,int b);     // 私有的两个参数的构造函数
};
Test::Test()
{
    /* 此处省略一些初始化的工作 */}
Test::Test(int a)
{
    /* …… */}
Test::Test(int a,int b)
{
    /* …… */}
析构函数

析构函数是一种特殊的成员函数,它会在每次删除所创建的对象时执行。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。格式如下:

类名::~析构函数名(){
   }

例如:

class Test
{
   
    public:
        ~Test();     // 析构函数
};
Test::~Test()
{
   /* 一些收尾的工作 */}

编程要求

在右侧编辑器中的Begin-End之间补充代码,编写一个学生类 Student,类中含有两个成员变量、两个构造函数和一个析构函数(访问性都为公有的),平台会调用你编写的函数来创建学生对象,具体要求如下:

  • 学号:int SID
  • 姓名:string Name
  • 无参的构造函数:Student(),在函数中将学号初始化为0,姓名初始化为王小明。
  • 带两个参数的构造函数:Student(int sid,string name);,在函数中分别用这两个参数设置内部的两个成员。
  • 析构函数:~Student(),在函数中输出学号 姓名 退出程序的消息。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:1 厉宏富 2 冷欣荣 3 鲍俊民

预期输出:

0 王小明 退出程序
3 鲍俊民 退出程序
2 冷欣荣 退出程序
1 厉宏富 退出程序

开始你的任务吧,祝你成功!

参考代码

step1/run.cpp

#include "usr.h"
#include<iostream>
#include<string>
using</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值