今天继续完成上周没有完成的习题---C++第三章课后作业,本章题涉及指针的使用,有指向对象的指针做函数参数,对象的引用以及友元类的使用方法等
它们具体的使用方法在下面的题目中会有具体的解析(解析标注在代码中)。
题目:
1.建立一个对象数组,内放5个学生数据(学号,成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
1 #include <iostream>
2 #include<stdlib.h>
3 using namespace std;
4 class Student
5 {public:
6 //定义学生数据函数
7 Student(int n,float s):num(n),score(s){}
8 int num;
9 float score;
10 };
11
12 void main()
13 {
14 //构建五个学生数据信息
15 Student stud[5]={
16 Student(101,78.5),Student(102,85.5),Student(103,98.5),
17 Student(104,100.0),Student(105,95.5)};
18 void max(Student* );//定义max函数
19 Student *p=&stud[0];//p指向数组第一个元素,p为实参,arr为形参
20 max(p);//调用函数,找到学生中成绩最高者,并输出其学号
21 }
22 //构建max函数,用指向对象(学生)的指针作函数的参数
23 void max(Student *arr)
24 { //假设学号为1的学生成绩最高
25 float max_score=arr[0].score;
26 int k=0;
27 //通过循环,逐个比较学生的成绩,直到查询完所有学生成绩,并返回最大值
28 for(int i=1;i<5;i++)
29 {
30 if(arr[i].score>max_score)
31 {
32 max_score=arr[i].score;
33 k=i;
34 }
35 }
36 //打印出成绩最大的学生的学号和成绩
37 cout<<arr[k].num<<" "<<max_score<<endl;
38 system("pause");
39 }
2.修改第6题的程序,增加一个fun函数,改写main函数。改为在fun函数中调用change和display函数。在fun函数中使用对象的引用(Student &)作为形参。
1 #include<iostream>
2 #include<stdlib.h>
3 using namespace std;
4 class Student
5 {
6 public:
7 //学生数据的构造函数
8 Student(int n,float s):num(n),score(s){}
9 //修改学生成绩的函数
10 void change(int n,float s){num = n;score = s;}
11 //输出学生成绩和学号的函数
12 void display(){cout<<num<<" "<<score<<endl;}
13 private:
14 int num;
15 float score;
16 };
17 //在fun函数中使用对象的引用(Student & stud)作为形参
18 void fun (Student & stud){
19 cout<<"修改前的学生数据信息"<<endl;
20 stud.display();
21 //调用change函数进行对学生数据信息的修改
22 stud.change(101, 80.5);
23 cout<<"修改后的学生数据信息"<<endl;
24 stud.display();
25 }
26 int main()
27 {
28 //定义一个学生数据信息
29 Student stud(101, 78.5);
30 //调用fun函数
31 fun(stud);
32 system("pause");
33 return 0;
34
35
36 }
3.将例3.13中的Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年,月,日和时,分,秒。
1 #include <iostream>
2 #include<stdlib.h>
3 using namespace std;
4 //声明Time,因为在Date中提前使用
5 class Time;
6 class Date{
7 public:
8 Date(int,int,int);
9 //将Time类声明为Date类的友元类
10 friend Time;
11 private:
12 int month;
13 int day;
14 int year;
15 };
16 //Date函数
17 Date::Date(int y,int m,int d):year(y),month(m),day(d){ }
18 class Time{
19 public:
20 Time(int,int,int);
21 void display(const Date &);
22 private:
23 int hour;
24 int minute;
25 int sec;
26 };
27 //Time函数
28 Time::Time(int h,int m,int s):hour(h),minute(m),sec(s){ }
29 //display函数
30 void Time::display(const Date &d){
31 //引用Date类中的私有数据
32 cout<<d.year<<"/"<<d.month<<"/"<<d.day<<endl;
33 //引用本类中的私有数据
34 cout<<hour<<":"<<minute<<":"<<sec<<endl;}
35 int main(){
36 Time t1(17,15,50);
37 Date d1(2019,10,28);
38 //通过Time类中的display函数引用Date类对象的私有数据
39 t1.display(d1);
40 system("pause");
41 return 0;
42 }
小结:
指针在编程学习过程中,是非常复杂的,必须非常明了其中的逻辑指向,才能更好的运用指针解决问题。C语言的指针使用非常广泛,但C++涉及的指针内容不多,主要为指针指向数组指定元素,指针指向函数,用指向对象的指针做函数参数几种。明确指针的指向和指针的取值,指针部分的学习就不难了。