题目要求
建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。
——谭浩强的《C++面向对象程序设计》第3章习题第4小题
对象数组
在一个对象数组中各个元素都是同类对象。
本题中,要求存放的学生数据均包含学号和成绩,因此可以建立一个数组,包含5个元素,代表5个学生,每个学生具有学号和成绩的属性。
在建立数组时,同时要调用构造函数。如果构造函数有多个参数,在定义对象数组时,需要在花括号中分别写出构造函数名并在括号内指定实参,以实现对象数组初始化。
定义对象数组并初始化的格式为:
Student stu[n]={ student(实参0-1,实参0-2,实参0-3), … … student(实参n-1,实参n-2,实参n-3) };
对象指针
本题中,需要用指针指向数组首元素,也就是用指针指向对象的起始地址。
首先需要定义一个类对象:
类名 对象名;
然后定义一个指针变量,用来指向该类对象。
定义对象的指针变量的格式:
类名 * 指针变量名;
最后用取址运算 (&) 来获取对象的起始地址:
指针变量名 = &对象名;
后两步可以简化为:
类名 * 指针变量名 = 对象名;
程序
student.h
/* ************************************************************************ @file: student.h @date: 2020.11.6 @author: Xiaoxiao @blog: https://blog.csdn.net/weixin_43470383/article/details/109445470 ************************************************************************ */ #include <iostream> using namespace std; class Student // 声明类类型 { private: // 声明私有部分 int num; // 学号 int score; // 成绩 public: // 声明公用部分 Student(int n, int s) : num(n), score(s) {}; // 定义带参数的构造函数,并用参数的初始化表对数据成员初始化 void display(); // 输出学生的学号和成绩数据 };
student.cpp
/* ************************************************************************ @file: student.cpp @date: 2020.11.6 @author: Xiaoxiao @blog: https://blog.csdn.net/weixin_43470383/article/details/109445470 ************************************************************************ */ #include"student.h" // 类外定义成员函数 void Student::display() // 成员函数定义,返回长方柱的体积 { cout << "num:" << num << endl; cout << "score:" << score << endl; }
main.cpp
/* ************************************************************************ @file: main.cpp @date: 2020.11.6 @author: Xiaoxiao @blog: https://blog.csdn.net/weixin_43470383/article/details/109445470 ************************************************************************ */ #include "student.h" int main() { Student stu[5] = { Student(8, 100), Student(9, 100), Student(10, 100), Student(11, 100), Student(12, 100) }; // 定义对象数组 Student *p; // 定义p为指向Student类对象的指针变量 p = stu; // 将stu的起始地址赋给p // 或:Student *p = stu; for (int i = 0; i <= 2 ;i ++) { p -> display(); // 调用p所指向的对象中的display函数,即stu.display p = p + 2; // 间隔一个学生,取数据 } system("pause"); return 0; }
运行结果
输出:
num:8
score:100
num:10
score:100
num:12
score:100