当前位置:   article > 正文

C++ 面向对象 - 类和对象的创建和使用_在右侧编辑器中的begin-end之间补充代码,声明并定义一个学生信息类 stinfo,该类有

在右侧编辑器中的begin-end之间补充代码,声明并定义一个学生信息类 stinfo,该类有

在现实世界中,经常有属于同一类的对象。例如,你的自行车只是世界上很多自行车中的一辆。在面向对象软件中,也有很多共享相同特征的不同的对象,可以利用这些对象的相同特征为它们建立一个集合,而这个集合就称为类。

C++ 中类是把各种不同类型的数据(称为数据成员)和对数据的操作(成员函数)组织在一起而形成的用户自定义的数据类型。它提供了可重用性的好处。

类定义包括声明实现两大部分。声明部分提供了对该类所有数据成员和成员函数的描述,而实现部分提供了所有成员函数的实现代码。

类的声明

类的声明,指的是描述一个类所拥有的结构。类的声明主要包含两个部分:成员变量和成员函数。

声明一个类的格式如下:

  1. class 类名
  2. {
  3. public: // 类的公有成员
  4. int A; // 公有的成员变量
  5. void PublicFunc(); // 公有的成员函数
  6. private: // 类的私有成员
  7. long B; // 私有的成员变量
  8. void PrivateFunc(); // 私有的成员函数
  9. public: // public,private 块可以多次交替出现
  10. double C;
  11. }; // 注意不要忘了最后的分号

class 是 C++ 中新增的关键字,专门用来声明类的,后面紧跟着类名,类名的首字母一般大写,以和其他的标识符区分开。{}内部是类所包含的成员变量和成员函数,它们统称为类的成员。public 也是 C++ 的新增关键字,它只能用在类的定义中,表示访问权限,下面这里介绍两种访问性:

  • public:公开访问性,代表这个成员能在类的定义以外的地方被使用

  • private:私有访问性,代表这个成员只能在类的定义内被使用

例如:

  1. class Test
  2. {
  3. public:
  4. int a;
  5. private:
  6. int b;
  7. };
  8. int main()
  9. {
  10. Test t;
  11. t.a = 10; // 访问公有成员变量,正确
  12. t.b = 10; // 访问私有成员变量,错误
  13. }
类的定义

如果说声明是书的目录,那么定义就是目录所指的具体内容。

类的定义,指的是根据声明具体实现类的功能,与一般的函数定义很相似。

比如:

  1. class Test
  2. {
  3. public:
  4. int a;
  5. void PubFun();
  6. private:
  7. int b;
  8. void PriFun();
  9. }; // 声明一个带有两个成员函数的类
  10. void Test::PubFun() // 定义公有的那个成员函数
  11. {
  12. a = 10;
  13. b = 10; // b 是私有成员变量,只能在成员函数的定义中访问
  14. }
  15. void Test::PriFun() //定义私有的那个成员函数
  16. {
  17. a = 20;
  18. b = 20; // b 是私有成员变量,只能在成员函数的定义中访问
  19. }

定义普通函数与类成员函数只有一点不同:在函数名前面加了类名::的前缀。其中的::称之为作用域运算符,它指明了成员函数所属的类。

不管是 public 成员函数,还是 private 成员函数,定义它们的方式都是相同的。

对象

类只是一种形式化的定义,要使用类提供的功能,必须使用类的实例,即对象,一个类可以定义多个对象,而对象要占据一定的内存空间。类和对象的关系就像整形和变量的关系。

每个对象都包含类中定义的各个数据成员的存储空间,共享类中定义的成员函数。对象的创建方法与声明一个普通变量相同,也采用类型名 变量名的格式。

例如:

  1. class Test
  2. {
  3. //此处省略 Test 类成员
  4. };
  5. int main()
  6. {
  7. int a; // 声明一个普通变量
  8. Test t1; // 创建一个类的对象
  9. }

对象访问类的成员

通过对象也可以访问一个类的成员,通过.成员运算符,格式是对象名.成员名

如果是数据成员,就可以对它进行赋值,如果是函数成员,就可以调用它。我们可以将其看做为一般变量,只是在变量名前面多了代表它所属对象的前缀。

例如:

  1. #include <iostream>
  2. class Test
  3. {
  4. public: // 两个公有成员
  5. int a;
  6. void Hello();
  7. };
  8. void Test::Hello() // 定义 Test 类的公有函数
  9. {
  10. std::cout << "Hello " << a << std::endl;
  11. }
  12. int main()
  13. {
  14. Test t1;
  15. t1.a = 10; // 给 t1 对象的数据成员 a 赋值
  16. t1.Hello(); // 调用 t1 对象的成员函数 hello
  17. }

输出结果为:Hello 10

注意:访问成员时要注意成员的访问性.

例题

第1关:设计一个学生信息类

任务描述

本关任务:声明并定义一个学生信息类。

相关知识

为了完成本关任务,你需要掌握类的声明和定义。

编程要求

在右侧编辑器中的Begin-End之间补充代码,声明并定义一个学生信息类 StInfo,该类有四个成员变量和两个函数,其访问性都为公有,具体要求如下:

  • 学号:int SID

  • 姓名:char *Name

  • 班级:char *Class

  • 手机号:char *Phone

  • 给成员变量赋值的函数: void SetInfo(int sid,char *name,char* cla,char* phone)

  • 打印学生信息的函数:void PrintInfo(),格式请参考测试说明。

测试说明

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

测试输入:1 小郭 计科1班 12312340000

预期输出:

  1. 学号:1
  2. 姓名:小郭
  3. 班级:计科1班
  4. 手机号:12312340000

测试输入:2 小王 计科2班 12312340001

预期输出:

  1. 学号:2
  2. 姓名:小王
  3. 班级:计科2班
  4. 手机号:12312340001
代码解析
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. class StInfo
  5. {
  6. /********* Begin *********/
  7. //在此处声明StInfo类
  8. public:
  9. int SID;
  10. char *Name;
  11. char *Class;
  12. char *Phone;
  13. void SetInfo(int sid, char* name, char* cla, char* phone){
  14. SID = sid;
  15. Name = new char[strlen(name)+1];
  16. strcpy(Name, name);
  17. Class = new char[strlen(cla)+1];
  18. strcpy(Class, cla);
  19. Phone = new char[strlen(phone)+1];
  20. strcpy(Phone, phone);
  21. }
  22. void PrintInfo()
  23. {
  24. cout << "学号:" << SID << endl;
  25. cout << "姓名:" << Name << endl;
  26. cout << "班级:" << Class << endl;
  27. cout << "手机号:" << Phone << endl;
  28. }
  29. /********* End *********/
  30. };
  31. /********* Begin *********/
  32. //在此处定义StInfo类
  33. StInfo s;
  34. /********* End *********/

第2关:设计一个长方形类

任务描述

本关任务:设计一个长方形类,通过访问它的成员变量来计算面积。

相关知识

为了完成本关任务,你需要掌握对象的创建和通过对象访问类的成员。

编程要求

在右侧编辑器中的Begin-End之间补充代码,设计 Rectangle 类和实现两个普通函数,类中有两个成员变量和两个函数,其中成员变量的访问性为私有,函数的访问性为公有,具体要求如下:

  • 高度:int height

  • 宽度:int width

  • 设置长方形的高和宽函数:void Set(int h, int w)

  • 获取长方形的面积函数:int GetArea()

  • Rectangle GetRect(int h,int w)普通函数,h 、w 分别代表长方形的高宽,函数用来创建一个 Rectangle 对象并返回。

  • int GetRectArea(Rectangle rect)普通函数,函数用来获取 rect 对象的面积。

测试说明

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

测试输入:10 15 、

预期输出:长方形的面积为:150

测试输入:100 100

预期输出:长方形的面积为:10000

代码解析
  1. /********* Begin *********/
  2. class Rectangle
  3. {
  4. //在此处实现Rectangle类
  5. private:
  6. int height;
  7. int width;
  8. public:
  9. void Set(int h, int w){
  10. height = h;
  11. width = w;
  12. }
  13. int GetArea(){
  14. return height*width;
  15. }
  16. };
  17. /********* End *********/
  18. Rectangle GetRect(int h,int w)
  19. {
  20. /********* Begin *********/
  21. //返回一个 h*w 的 Rectangle 对象
  22. Rectangle r;
  23. r.Set(h, w);
  24. return r;
  25. /********* End *********/
  26. }
  27. int GetRectArea(Rectangle rect)
  28. {
  29. /********* Begin *********/
  30. //返回 rect 对象的面积
  31. return rect.GetArea();
  32. /********* End *********/
  33. }

第3关:设计汽车类

任务描述

本关任务:设计一个汽车类,并实现它的基本功能。

编程要求

在右侧编辑器中的Begin-End之间补充代码,设计汽车类实现汽车的基本功能,根据输入的命令来输出汽车的整体状态。具体要求如下:

  1. 成员变量:车门,车灯,速度(类型以及变量名均自拟)。

  2. 成员函数:打开车门、关闭车门、打开车灯、关闭车灯、加速、减速。(学员可以根据自己情况增加或者减少函数)

其中打开车门、关闭车门、打开车灯、关闭车灯四个函数,用于改变对象内部对应的成员变量的值。加速,减速两个函数,每次调用就将内部的速度变量分别对应增加10或者减少10。车门,车灯两个函数的初始状态都为 OFF,速度的初始值为0。

根据输入的命令(命令由1-6表示,分别对应调用打开车门、关闭车门、打开车灯、关闭车灯、加速、减速函数)输出汽车的最终状态,若输入命令135则输出状态如下:

  1. 车门 ON
  2. 车灯 ON
  3. 速度 10

上述命令为135,则分表调用了打开车门、打开车灯、加速这三个函数,因此最后输出的汽车状态为车门打开,车灯打开和速度为10。

测试说明

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

注意:命令长度不超过 20,最短长度 1。

测试输入:135

预期输出:

  1. 车门 ON
  2. 车灯 ON
  3. 速度 10

测试输入:135562

预期输出:

  1. 车门 OFF
  2. 车灯 ON
  3. 速度 10
代码解析
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. /********* Begin *********/
  5. //在此处实现一个汽车类
  6. class Car
  7. {
  8. private:
  9. bool door;
  10. bool light;
  11. int speed;
  12. public:
  13. Car(){
  14. door = false;
  15. light = false;
  16. speed = 0;
  17. }
  18. void openDoor(){
  19. door = true;
  20. }
  21. void closeDoor(){
  22. door = false;
  23. }
  24. void openLight(){
  25. light = true;
  26. }
  27. void closeLight(){
  28. light = false;
  29. }
  30. void speedUp(){
  31. speed += 10;
  32. }
  33. void slowDown(){
  34. speed -= 10;
  35. }
  36. void printStatus(){
  37. cout << "车门 " << (door?"ON":"OFF") << endl;
  38. cout << "车灯 " << (light?"ON":"OFF") << endl;
  39. cout << "速度 " << speed << endl;
  40. }
  41. };
  42. /********* End *********/
  43. int main()
  44. {
  45. /********* Begin *********/
  46. //在此处解析执行输出汽车的整体状态
  47. Car car;
  48. char cmds[25];
  49. cin >> cmds;
  50. for(int i=0; i < strlen(cmds); i++){
  51. switch(cmds[i]) {
  52. case '1': car.openDoor(); break;
  53. case '2': car.closeDoor(); break;
  54. case '3': car.openLight(); break;
  55. case '4': car.closeLight(); break;
  56. case '5': car.speedUp(); break;
  57. case '6': car.slowDown(); break;
  58. }
  59. }
  60. car.printStatus();
  61. return 0;
  62. /********* End *********/
  63. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/244380
推荐阅读
相关标签
  

闽ICP备14008679号