今天继续完成上周没有完成的习题---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. 滚动条mCustomScrollbar自定义

    mCustomScrollbar 是个基于 jQuery UI 的自定义滚动条插件,它可以让你灵活的通过 CSS 定义网页的滚动条,并且垂直和水平两个方向的滚动条都可以定义,它通过 Brandon A ...

  2. ARM中断深入分析几点

    ARM中断深入分析几点 1.程序发生中断后,是如何跳转到中断程序里面的? 2.执行完中断后,如何返回到原来被打断的地方接着执行呢? 3.ARM处理器的流水线结构对中断返回地址的计算有什么影响? 4.A ...

  3. Latex局部字体大小设置

    tex 设置字体大小命令由小到大依次为: \tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \huge \ ...

  4. Non-Maximum Suppression(非极大值抑制)

    定义与介绍(NMS 以及soft-NMS也有简单的介绍): https://www.cnblogs.com/makefile/p/nms.html IoU的介绍这篇写的不错: https://oldp ...

  5. 【转载】C#中List集合使用RemoveRange方法移除指定索引开始的一段元素

    在C#的List集合操作中,移除集合中的元素可以使用Remove方法和RemoveAt方法,这两个方法都是进行单个List集合元素的移除,其实List集合中还有个RemoveRange方法来移除一整段 ...

  6. shell 字符串截取表达式

    ${var#str} 从左向右匹配,非贪婪匹配,截取并保留右边的内容 txt='123456abc123456' echo ${txt#*34} # 56abc123456 ${var##str} 从 ...

  7. [服务器]SSL安装证书教程

    来自阿里云教程 Tomcat服务器安装SSL证书 安装PFX格式证书 https://help.aliyun.com/document_detail/98576.html?spm=a2c4g.1118 ...

  8. python多进程间通信

    这里使用pipe代码如下: import time from multiprocessing import Process import multiprocessing class D: @stati ...

  9. Redis持久化小结

    RDB RDB持久化方式是通过快照(snapshotting)完成的,当符合一定条件时,Redis将内存中所有数据以二进制方式生成一份副本并存储在硬盘上. 触发机制 save命令:阻塞当前Redis服 ...

  10. HTTP协议复习二--代理

    代理(Proxy)是HTTP协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客 户端的请求,也可以转发服务器的应答.代理有很多的种类,常见的有:1.匿名代理:完全“隐匿”了被代理的机器, ...