2015级C++第8周项目 数组和指针

简介: 【项目1 - 数组作数据成员】参考解答   下面是设计好的一个工资类(Salary):class Salary { public: void set_salarys( );//输入职工工资(输入-1标志着工资输入结束),工资保存到salary数组中,实际人数保存到number中; void add_salarys(int x); //给每个

【项目1 - 数组作数据成员】参考解答
  下面是设计好的一个工资类(Salary):

class Salary  
{  
public:
    void set_salarys( );//输入职工工资(输入-1标志着工资输入结束),工资保存到salary数组中,实际人数保存到number中;
    void add_salarys(int x); //给每个人涨x元工资
    void sort_salarys(); //对工资由大到小排序
    void show_salarys( ); //显示工资信息
private:  
    double salarys[50]; //多人的工资  
    int number;  //实际人数  
};  

  (1)实现Salary类中的成员函数,在main函数定义Salary类的对象,输入工资,再给每个人涨500元工资,排序后工资数据,然后输出结果。
  (2)手工输入工资?!太让人不能忍受了。现给出包含了不足500个职工工资的文件salary.txt(下载),增加一个成员函数,用于从文件中读出数据,再增加一个成员函数,将排序后结果保存到一个文件中。编写main函数,测试你扩充的功能。
  (3)用多文件的方式组织最后的程序。

【项目2-用对象数组操作长方柱类】参考解答
  编写基于对象的程序,求5个长方柱的体积和表面积。长方柱类Bulk的数据成员包括长(length)、宽(width)、高(heigth)等。
  对照已经给出的代码,要做的工作及要求有:

  • 需要你定义长方柱类,代码中已经给出由5个长方柱对象构成的对象数组b;
  • B数组中的前3个对象b[0]、b[1]、b[2]直接参数初始了,需要定义构造函数,而初始化中,各对象提供的参数数目不同,需要有默认参数的构造函数(未给出的参数默认为1.0)
  • 第4个对象b[3]用默认构造函数初始化;
  • 设计成员函数output,在main中调用输出这5个长方柱的体积和表面积;
int main()  
{  
     Bulk b[5]={Bulk(2.3,4.5,6.7),Bulk(1.5,3.4),Bulk(10.5)};  
     b[4].get_value();  
     //下面分别输出这5个长方柱的体积和表面积  
}  

【项目3-指向学生类的指针】参考解答
  设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set、get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索)。在main函数中,要做到
   建立一个对象数组,通过初始化,设置5个学生的数据;
   用指针指向数组首元素,输出第1、3、5个学生的信息;
   设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并返回值其学号。
  下面给出部分程序,在此基础上完成项目:

class Student  
{  
public:  
    ……  
private:  
    int num;   //学号  
    double score;   //成绩  
};  

//max函数返回arr指向的对象数组中的最高成绩者的学号(max并不是成员函数,而是普通函数)  
int max(Student *arr);  

int main()  
{  
    Student stud[5]=  
    {  
        Student(101,78.5),Student(102,85.5),Student(103,100),  
        Student(104,98.5),Student(105,95.5)  
    };  
    //输出第1、3、5个学生的信息(用循环语句)  
    ……  
    //输出成绩最高者的学号  
    cout<<"5个学生中成绩最高者的学号为: "<<max(stud);//调用函数显示最高成绩  
    return 0;  
}  

【项目4-游戏中的角色类增强版】
  (4-1)阅读博文“C++游戏系列4:杀伤距离有限制”(链接…),回答下面的问题:
   Role类的数据成员中,有哪些成员上类的对象?
   观察Role类的构造函数,说出:若某类的“数据成员为别的类的对象”,其构造函数定义时的要点有什么?
   仔细研读Role::attack成员函数,说出攻击行为的条件,以及攻击行为中要做的事情。
   直接Copy博文中的程序,建立多文件项目,运行程序,并修改main函数,观察运行结果的变化(本项目测试不充分,欢迎写评论报BUG)。


  (4-2)在上面已经建好的项目基础上,将Weapon类的数据成员改为数组,以支持一个角色可以带多件武器的需求,为此,在原类基础上,改造及增加的数据成员和成员函数至少包括:

class Role
{
public:
    ……
    void changeWeapon(int wno); //换手中的武器
private:
    ……
    Weapon weapons[N];  //武器,N为定义的常变量
    int weaponNum;      //武器数目
    int holdWeapon;     //现在手持哪一件武器(用武器数组的下标做标识)。
                         //0 ≤ holdWeapon < weaponNum
                         //初始时为空手,空手时holdWeapon值为-1,将-1定义为常变量为宜)
};

提示:
其他成员函数可能也需要修改(如构造函数,用于输出的成员函数等),请根据需要改动。

参考解答  


  (4-3)以上的项目,用于支持游戏的类大致已经完善,为让游戏能够多个角色参与进来,不能够依靠定义有限个Role类的对象,通过代码玩,现在想做一个游戏的演示,让任意多个对象,自动展开PK。建议的策略有(可以有你自己的策略):
   定义Role类的数组,表示参与游戏的角色;
   角色可能会持有的武器,由一个文件weapon.txt提供,包括武器名,杀伤力及杀伤半径(可以下载…,还可以自己手工建这个文件)
   定义对Role类数组中对象设置初始值,包括每个角色类对象的名称、血量、位置、武器等,都可以由产生的随机数确定
   由随机数确定每一轮游戏中,要行动的角色,以及要执行的行动(移动、换武器、攻击、吃等),通过循环,组织起多轮的游戏。轮数太多时,用文件保存每一轮发生的情节,你通过看文件,知道游戏的过程。

参考解答  

目录
相关文章
|
12天前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
29 3
|
7天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
26 4
|
11天前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
25 2
WK
|
16天前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
38 1
|
23天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
20天前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
26 1
|
29天前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
29天前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。
|
6天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
29 4
|
30天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4