【C++之对象数组和对象指针1】输出第1,3,5个学生的数据

简介: 【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
@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


相关文章
|
11月前
|
缓存 安全 编译器
C++面试周刊(3):面试不慌,这样回答指针与引用,青铜秒变王者
《C++面试冲刺周刊》第三期聚焦指针与引用的区别,从青铜到王者级别面试回答解析,助你21天系统备战,直击高频考点,提升实战能力,轻松应对大厂C++面试。
942 132
C++面试周刊(3):面试不慌,这样回答指针与引用,青铜秒变王者
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
268 2
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
11月前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
781 12
|
存储 C++
UE5 C++:自定义Http节点获取Header数据
综上,通过为UE5创建一个自定义HTTP请求类并覆盖GetResult方法,就能成功地从HTTP响应的Header数据中提取信息。在项目中使用自定义类,不仅可以方便地访问响应头数据,也可随时使用这些信息。希望这种方法可以为你的开发过程带来便利和效益。
573 35
|
编译器 C++
类和对象(中 )C++
本文详细讲解了C++中的默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载和取地址运算符重载等内容。重点分析了各函数的特点、使用场景及相互关系,如构造函数的主要任务是初始化对象,而非创建空间;析构函数用于清理资源;拷贝构造与赋值运算符的区别在于前者用于创建新对象,后者用于已存在的对象赋值。同时,文章还探讨了运算符重载的规则及其应用场景,并通过实例加深理解。最后强调,若类中存在资源管理,需显式定义拷贝构造和赋值运算符以避免浅拷贝问题。
|
存储 编译器 C++
类和对象(上)(C++)
本篇内容主要讲解了C++中类的相关知识,包括类的定义、实例化及this指针的作用。详细说明了类的定义格式、成员函数默认为inline、访问限定符(public、protected、private)的使用规则,以及class与struct的区别。同时分析了类实例化的概念,对象大小的计算规则和内存对齐原则。最后介绍了this指针的工作机制,解释了成员函数如何通过隐含的this指针区分不同对象的数据。这些知识点帮助我们更好地理解C++中类的封装性和对象的实现原理。
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
669 12
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
343 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
编译器 C++
类和对象(下)C++
本内容主要讲解C++中的初始化列表、类型转换、静态成员、友元、内部类、匿名对象及对象拷贝时的编译器优化。初始化列表用于成员变量定义初始化,尤其对引用、const及无默认构造函数的类类型变量至关重要。类型转换中,`explicit`可禁用隐式转换。静态成员属类而非对象,受访问限定符约束。内部类是独立类,可增强封装性。匿名对象生命周期短,常用于临时场景。编译器会优化对象拷贝以提高效率。最后,鼓励大家通过重复练习提升技能!