C++第三章课后作业答案及解析---指针的使用
今天继续完成上周没有完成的习题---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++第三章课后作业答案及解析---指针的使用的更多相关文章
- CSAPP深入理解计算机系统(第二版)第三章家庭作业答案
<深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...
- Hand on Machine Learning第三章课后作业(1):垃圾邮件分类
import os import email import email.policy 1. 读取邮件数据 SPAM_PATH = os.path.join( "E:\\3.Study\\机器 ...
- Hand on Machine Learning第三章课后作业(2):其余小练习
-#!/usr/bin/env python -# # # -- coding: utf-8 -- -# # # @Time : 2019.5.22 14:09 -# # # @Author : An ...
- c++ primer plus 第三章 课后题答案
#include<iostream> using namespace std; int main() { ; int shen_gao; cout <<"Please ...
- C语言程序设计:现代方法(第2版)第三章全部习题答案
前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...
- JAVA第三周课后作业
JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main( ...
- Java语言程序设计(第三版)第二章课后习题答案(仅供参考)
2.1 注意不同类型转换 import java.util.Scanner; public class Ch02 { public static void main(String[] args) ...
- 深入理解计算机系统_3e 第二章家庭作业答案
初始完成者:哈尔滨工业大学 李秋豪 许可:除2.55对应代码外(如需使用请联系randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分发本文档的代码. 本机环境: (有一些需要 ...
- 中级Perl 第三章课后习题
3. 10. 1. 练习1 [25 分钟] 读当前目录的文件列表并转换成全路径.不能用shell 命令或外部程序读当前目 录.Perl 的File::Spec 和Cwd 两个模块对这个程序有帮助.每个 ...
随机推荐
- 将本机电脑作为自己的网站服务器--基于XAMPP在本地建立wordPress网站
"我不敢说自己从未担心害怕过. 实际上我希望少一点担心害怕,因为它让我分心,让我的神经系统备受煎熬".----马斯克 周日,搞了大半天,为了熟悉wordPress,先在自己的电脑上 ...
- javaNIO核心概念
在java的阻塞IO中使用InputStream和outputStream来进行输入和输出,那么两种流是相互独立使用的,而且每次数据传输都要通过“用户态数据”向“os内核态数据”copy或从“os内核 ...
- IdentityServer4实现OAuth2.0四种模式之客户端模式
一,准备内容 IdentityServer4 是Asp.net core的一个中间件,用于添加符合OpenId Connect和OAuth2.0规范的终端到Asp.net Core应用.在这里简单介绍 ...
- serviceBehaviors_dataContractSerializer_maxItemsInObjectGraph 关键**Behavior
<behaviors> <serviceBehaviors> <behavior name="STHotel.Product.WCFService.HotelP ...
- python实现scp功能
最近公司有一个需求,需要把服务器A上的任务放到服务器B上,因为B上有HTTP,并且可以被外网访问,但是直接通过shell的scp,每次都需要输入密码.这里用python简单实现一下 直接上代码: im ...
- 5G能带来什么改变-从鸿蒙OS说起
背景 从5G投票事件开始,开始关注5G.许多文章都说到5G的特点有速度快.时延低,其中,时延低是最重要的特点.然而,时延低能给社会带来什么改变呢? 2G是短信的时代,3G促成了语音视频,4G促成了短视 ...
- Web应用的生命周期(客户端)
典型的一个Web应用的生命周期从用户在浏览器输入一串URL,或者单击一个链接开始(就是访问一个页面).而这个生命周期的结束就是我们关闭这个页面. 响应流程: 用户输入一个 URL(生命周期开始) 客户 ...
- 关于阿里 iconfont 的使用步骤
第一步: 在iconfont库中,找到你想要的图标,加入到购物车,再在购物车中将图标加入到你的项目中去 第二步: 在项目中,可以看到刚刚加入的图标,这里是你在项目中所有用到的iconfont,选 ...
- [转]数据库性能优化(老Key)
数据库性能优化一:数据库自身优化(大数据量) https://www.cnblogs.com/AK2012/archive/2012/12/25/2012-1228.html 数据库性能优化二:数据库 ...
- [MySQL]重装数据库后无法启动服务
具体情况请查看下面网址 https://www.jianshu.com/p/8dda50ee812f 错误信息可以在CMD里输入mysqld --console查看