【C++之对象数组和对象指针1】输出第1,3,5个学生的数据
题目要求
建立一个对象数组,内放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
************************************************************************
*/
#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
************************************************************************
*/
#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
************************************************************************
*/
#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
********************************************
#C/C++##c++#C++学习 文章被收录于专栏
c++面向对象程序设计课, 作业题选自谭浩强的《c++面向对象程序设计》(第2版)