C++第三章课后作业答案及解析---指针的使用
今天继续完成上周没有完成的习题---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++涉及的指针内容不多,主要为指针指向数组指定元素,指针指向函数,用指向对象的指针做函数参数几种。明确指针的指向和指针的取值,指针部分的学习就不难了。