今天继续完成上周没有完成的习题---C++第三章课后作业,本章题涉及指针的使用,有指向对象的指针做函数参数,对象的引用以及友元类的使用方法等

它们具体的使用方法在下面的题目中会有具体的解析(解析标注在代码中)。

题目:

1.建立一个对象数组,内放5个学生数据(学号,成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。

 #include <iostream>
#include<stdlib.h>
using namespace std;
class Student
{public:
//定义学生数据函数
Student(int n,float s):num(n),score(s){}
int num;
float score;
}; void main()
{
//构建五个学生数据信息
Student stud[]={
Student(,78.5),Student(,85.5),Student(,98.5),
Student(,100.0),Student(,95.5)};
void max(Student* );//定义max函数
Student *p=&stud[];//p指向数组第一个元素,p为实参,arr为形参
max(p);//调用函数,找到学生中成绩最高者,并输出其学号
}
//构建max函数,用指向对象(学生)的指针作函数的参数
void max(Student *arr)
{ //假设学号为1的学生成绩最高
float max_score=arr[].score;
int k=;
//通过循环,逐个比较学生的成绩,直到查询完所有学生成绩,并返回最大值
for(int i=;i<;i++)
{
if(arr[i].score>max_score)
{
max_score=arr[i].score;
k=i;
}
}
//打印出成绩最大的学生的学号和成绩
cout<<arr[k].num<<" "<<max_score<<endl;
system("pause");
}

2.修改第6题的程序,增加一个fun函数,改写main函数。改为在fun函数中调用change和display函数。在fun函数中使用对象的引用(Student &)作为形参。

  #include<iostream>
#include<stdlib.h>
using namespace std;
class Student
{
public:
//学生数据的构造函数
Student(int n,float s):num(n),score(s){}
//修改学生成绩的函数
void change(int n,float s){num = n;score = s;}
//输出学生成绩和学号的函数
void display(){cout<<num<<" "<<score<<endl;}
private:
int num;
float score;
};
//在fun函数中使用对象的引用(Student & stud)作为形参
void fun (Student & stud){
cout<<"修改前的学生数据信息"<<endl;
stud.display();
//调用change函数进行对学生数据信息的修改
stud.change(, 80.5);
cout<<"修改后的学生数据信息"<<endl;
stud.display();
}
int main()
{
//定义一个学生数据信息
Student stud(, 78.5);
//调用fun函数
fun(stud);
system("pause");
return ; }

3.将例3.13中的Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年,月,日和时,分,秒。

 #include <iostream>
#include<stdlib.h>
using namespace std;
//声明Time,因为在Date中提前使用
class Time;
class Date{
public:
Date(int,int,int);
//将Time类声明为Date类的友元类
friend Time;
private:
int month;
int day;
int year;
};
//Date函数
Date::Date(int y,int m,int d):year(y),month(m),day(d){ }
class Time{
public:
Time(int,int,int);
void display(const Date &);
private:
int hour;
int minute;
int sec;
};
//Time函数
Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){ }
//display函数
void Time::display(const Date &d){
//引用Date类中的私有数据
cout<<d.year<<"/"<<d.month<<"/"<<d.day<<endl;
//引用本类中的私有数据
cout<<hour<<":"<<minute<<":"<<sec<<endl;}
int main(){
Time t1(,,);
Date d1(,,);
//通过Time类中的display函数引用Date类对象的私有数据
t1.display(d1);
system("pause");
return ;
}

小结:

  指针在编程学习过程中,是非常复杂的,必须非常明了其中的逻辑指向,才能更好的运用指针解决问题。C语言的指针使用非常广泛,但C++涉及的指针内容不多,主要为指针指向数组指定元素,指针指向函数,用指向对象的指针做函数参数几种。明确指针的指向和指针的取值,指针部分的学习就不难了。

C++第三章课后作业答案及解析---指针的使用的更多相关文章

  1. CSAPP深入理解计算机系统(第二版)第三章家庭作业答案

    <深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...

  2. Hand on Machine Learning第三章课后作业(1):垃圾邮件分类

    import os import email import email.policy 1. 读取邮件数据 SPAM_PATH = os.path.join( "E:\\3.Study\\机器 ...

  3. Hand on Machine Learning第三章课后作业(2):其余小练习

    -#!/usr/bin/env python -# # # -- coding: utf-8 -- -# # # @Time : 2019.5.22 14:09 -# # # @Author : An ...

  4. c++ primer plus 第三章 课后题答案

    #include<iostream> using namespace std; int main() { ; int shen_gao; cout <<"Please ...

  5. C语言程序设计:现代方法(第2版)第三章全部习题答案

    前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...

  6. JAVA第三周课后作业

    JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main( ...

  7. Java语言程序设计(第三版)第二章课后习题答案(仅供参考)

    2.1   注意不同类型转换 import java.util.Scanner; public class Ch02 { public static void main(String[] args) ...

  8. 深入理解计算机系统_3e 第二章家庭作业答案

    初始完成者:哈尔滨工业大学 李秋豪 许可:除2.55对应代码外(如需使用请联系randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分发本文档的代码. 本机环境: (有一些需要 ...

  9. 中级Perl 第三章课后习题

    3. 10. 1. 练习1 [25 分钟] 读当前目录的文件列表并转换成全路径.不能用shell 命令或外部程序读当前目 录.Perl 的File::Spec 和Cwd 两个模块对这个程序有帮助.每个 ...

随机推荐

  1. 数组转JSON对象

    代码: function arrayToJson(arr){ var js={}; for(var i=0;i<arr.length;i++){ js[arr[i].name]=arr[i].v ...

  2. 使用Python快速实现简单的人脸检测

    最近有个比较要好的朋友问我能不能从监控视频里识别到从监控跟前经过的指定的人.因为他们单位的监控室经常要花大量的人力跟时间去找某个人在哪个位置出现过的证据.听起来像是一份比较有挑战性的任务,就答应他试试 ...

  3. day40——数据库、数据库分类、安装、修改密码、字符集编码、简单语句介绍

    day40 详情请看:https://www.cnblogs.com/clschao/articles/9907529.html 数据库 数据库 简而言之可视为电子化的文件柜--存储电子文件的处所,用 ...

  4. Linux忘记root密码操作方法

    此方法为:进入单用户模式,直接修改新密码覆盖掉以前的root密码. 操作步骤: 1.进入单用户模式 2.修改root密码 1.进入单用户方法: 1)启动Linux时,通过按上下键(其他键也可以)让Li ...

  5. go 渲染数据到文件

    //把数据写到文件里面 package main import ( "fmt" "text/template" "time" "o ...

  6. microk8s 搭建

    一.简述 microk8s不通过虚拟机但与主机隔离方式,快速轻巧安装Kubernetes.通过在单个快照包中打包Kubernetes,Docker.io,iptables和CNI的所有上游二进制文件来 ...

  7. go 学习笔记(4) import

    package main import ( f "fmt" ) const NAME string = "imooc" var a string = " ...

  8. 系統启动直接进BIOS

  9. Jenkins 构建方式有几种

    jenkins三种部署方式: 一.jenkins触发式构建:用于开发环境部署,开发人员push代码或者合并代码到gitlab项目的master分支,jenkins就部署代码到对应服务器. 二.jenk ...

  10. 通过Git和GitHub项目管理

    用Git来管理代码文件 安装环境 windows 首先是安装git: 1.到git官网下载一个安装包 2.安装git,详细过程略 3.打开项目文件夹,并鼠标右击,打开git bash 4.从未使用过g ...