今天继续完成上周没有完成的习题---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. Selenium自动化获取WebSocket信息

    性能日志 ChromeDriver支持性能日志记录,您可以从中获取域“时间轴”,“网络”和“页面”的事件,以及指定跟踪类别的跟踪数据. 启用性能日志 默认情况下不启用性能日志记录.因此,在创建新会话时 ...

  2. Apache Kafka + Spark Streaming Integration

    1.目标 为了构建实时应用程序,Apache Kafka  - Spark Streaming Integration是最佳组合.因此,在本文中,我们将详细了解Kafka中Spark Streamin ...

  3. 图片url地址的生成获取方法

    在写博客插入图片时,许多时候需要提供图片的url地址.作为菜鸡的我,自然是一脸懵逼.那么什么是所谓的url地址呢?又该如何获取图片的url地址呢? 首先来看一下度娘对url地址的解释:url是统一资源 ...

  4. Dubbo快速入门 三

    3.dubbo环境搭建 3.1).[windows]-安装zookeeper 1.下载zookeeper 网址 https://archive.apache.org/dist/zookeeper/zo ...

  5. Android手机的分区以及一些刷机术语的了解

    最早以前的手机基本都是下载一个刷机软件(像刷机精灵.刷机大师),一键root,一键刷机,这就以前的傻瓜式刷机,至少我在高中(2015年开始接触)的时候也是这么干的.那时候,好像有种手机开机界面会出现“ ...

  6. AQS(AbstractQueuedSynchronizer)

    AbstractQueuedSynchronizer 是一个锁框架.实现的原理(大概): 1.关于重入锁方面的实现,参考(手写一个可重入锁). 2.关于公平锁方面的实现,使用双链表的形式,进行公平锁的 ...

  7. java之hibernate之session中对象的生命周期

    1. session是用来执行对象的crud操作,并且session是对象事务工厂.session是线程级别的,所以生命周期比较短. 2.session中对象的生命周期图: 3.session中对象的 ...

  8. webpack+vue搭建vue项目

    阅读地址: https://www.jianshu.com/p/23beadfa4aa5 源码地址:https://github.com/Ezoio/IMI-SOURCE-CODE

  9. python BeautifulSoup4--例子

    from bs4 import BeautifulSoup import requests import re #请求博客园首页 r=requests.get('http://www.cnblogs. ...

  10. 一张图弄懂js原型和原型链

    前言 JavaScript的原型和原型链是面试的时候经常被问及到的问题,考察了我们对JavaScript的基础掌握情况,今天我们在这里用一张图来梳理下其中的知识点. 下面我来引入这张非常经典的图,我也 ...