西南科技大学C++程序设计实验四(类与对象三)

一、实验目的

1. 理解类的组合定义、说明与使用

2. 参数化列表的使用

3. 组合类的特例——string类

二、实验任务

重点:掌握组合类的定义与实现,丰富类的数据成员与成员函数,拓展其功能。

  1. 阅读分析、完善程序。下面是一个组合类 Teacher的定义,数据成员包括代表姓名的字符串类对象name,代表学号的常字符串指针,代表生日的Date类对象;成员函数包括无参、有参、复制构造函数,以及信息输出函数,现要求:

(1)思考并实验验证程序,回答程序处标注的思考题?

(2)查阅资料回答:组合类对象不用参数化列表方式初始化是否可以?常数据成员,常成员函数的特点?

在C++中,组合类对象可以使用默认构造函数进行初始化,不一定需要参数化列表方式。常数据成员是指在类中声明为const的成员变量,它们的值不能在对象生命周期内被修改。常成员函数是指在类中声明为const的成员函数,它们保证不会修改对象的状态,只能访问对象的常数据成员和非常成员函数。常数据成员和常成员函数可以提高程序的可读性和安全性,尤其是在多线程或并发编程中。

(3)查阅资料回答:静态变量、静态成员函数的特点?

静态变量和静态成员函数的特点包括:

1.与类相关而不是与对象相关。

2.可以通过类名直接访问。

3.不需要类的实例即可使用。

4.静态变量在程序生命周期内只创建一次,本质上是全局变量,因此需要小心使用以避免命名冲突。

5.静态成员函数不能访问非静态成员,也不能使用this指针,因为它们没有隐式的对象参数。

(4)查阅资料回答:string类的使用特点?

string类的使用特点包括:

1.动态内存管理:string类自动处理字符串的内存分配和释放,避免了手动管理内存带来的问题。

2.支持各种操作:string类支持大量的字符串操作,包括连接、比较、查找、替换等,方便了程序员的开发工作。

3.可读性强:string类代码具有可读性强的特点,能够很好地表达程序员的意图,降低代码出错的概率。

4.高效性:尽管string类是动态内存管理,但通过优秀的实现和算法,它可以非常高效地执行大多数操作。

5.与C风格字符串兼容:string类可以轻松地与C风格字符串进行转换和互操作,这使得在C++程序中使用已有的C代码更加容易。

#include <iostream>
#include <string>
using namespace std;
class Date
{
 
 private:
    int y, m, d;
    const int a;
    static int c;
public:
    Date():a(0) //常变量使用初始化列表方式初始化
    {
 
 
        y = m = d = 0;
    }
    Date(int yy, int mm, int dd) : y(yy),a(0)//普通常变量也可以使用初始化列表方式初始化
    {
 
 
        m = mm; d = dd;
    }
    Date(Date &dt) :y(dt.y), a(dt.a)
    {
 
 
        m = dt.m; d = dt.d;
    }
    void output()
    {
 
 
        y = d;
        cout << y << ":" << m << ":" << d << endl;
        cout << "a="<<a << endl;
    }
    void output()const
    {
 
 

    y = d;  //思考1常成员函数是否可以改变变量的值

        cout << "a=" << a << endl;
        cout << y << ":" << m << ":" << d << endl;
    }
};
int Date::c = 0; //静态数据成员初始化
class Teacher  //组合类
{
 
 
private:
    string name;
    const char* str;
    Date bir;
public:
    Teacher(string n,const char* s,Date b):bir(b//思考2第二个形参是否可以去掉const 
    {
 
 
        name=n;
        str =s;
    }
    Teacher() //思考3无参构造函数中内嵌对象bir如何实现初始化 
    {
 
 
        name = " ";
        str = " ";
    }
    Teacher(Teacher &t) :bir(t.bir)
    {
 
 
        name =t.name;
        str =t.str;
    }
    string getname()
    {
 
 
        return name;
    }
    const char* getstr() //思考4:此函数是常成员函数吗 

  
    {
 
 
        return str;
    }
    

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 06:46:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 06:46:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 06:46:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 06:46:05       20 阅读

热门阅读

  1. 透明度值和注意点

    2023-12-06 06:46:05       31 阅读
  2. 编程思想/oop设计模式

    2023-12-06 06:46:05       31 阅读
  3. Android Studio的代码笔记--IntentService学习

    2023-12-06 06:46:05       35 阅读
  4. .Net Core 单元测试获取配置文件节点值

    2023-12-06 06:46:05       28 阅读
  5. SQL int(1) 和 int (10)的区别

    2023-12-06 06:46:05       29 阅读