zoukankan      html  css  js  c++  java
  • C++面向对象程序设计第三章习题答案解析

    整理一下自己写的作业,供考试前复习用,哈哈

    进入正题!!!

    题目:

    2.分析下面的程序,写出其运行时的输出结果

    这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释

     1 #include<iostream>
     2 //原题的#include<iostream.h>写法错误
     3 #include<stdlib.h>
     4 //用于解决闪屏的头文件
    5 using namespace std;
     6 //原题缺少该行代码,用于输入cin和输出cout
     7 class Date{
     8 public:
     9     Date(int,int,int);
    10     Date(int,int);
    11     Date(int);
    12     Date();
    13     
    14     void display();
    15 private:
    16     int month;
    17     int day;
    18     int year;
    19 
    20 };
    21 
    22 Date::Date(int m,int d,int y):month(m),day(d),year(y){}
    23 
    24 Date::Date(int m,int d):month(m),day(d)
    25 {year=2005;}
    26 
    27 Date::Date(int m):month(m)
    28 {day=1;year=2005;}
    29 
    30 Date::Date()
    31 {month=1;day=1;year=2005;}
    32 
    33 void Date::display()
    34 {
    35     cout<<month<<"/"<<day<<"/"<<year<<endl;
    36 }
    37 
    38 int main()
    39 {
    40     Date d1(10,13,2005);
    41     Date d2(12,30);
    42     Date d3(10);
    43     Date d4;
    44     d1.display();
    45     d2.display();
    46     d3.display();
    47     d4.display();
    48     system("pause");
    49     //解决闪屏的代码
    50     return 0;
    51 }

    运行结果:

    3.如果将第2题中程序的第四行改为用默认参数,即

    Date(int =1,int =1,int =2005);

    分析程序有无问题。上机编译,分析出错信息,修改程序使之能通过编译。要求保留上面一行给出的构造函数,同时能输出与第2 题程序相同的输出结果。

    解析:在第2题的代码上进行修改。

    错误点:

     

     修改错误,编译成功的代码:

     1 #include<iostream>
     2 //原题的#include<iostream.h>写法错误
     3 #include<stdlib.h>
     4 //用于解决闪屏的头文件
     5 using namespace std;
     6 //原题缺少该行代码,用于输入cin和输出cout
     7 class Date{
     8 public:
     9     Date(int x=1,int y=1,int z=2005);
    10     Date(int,int);
    11     Date(int);
    12     Date();
    13     
    14     void display();
    15 private:
    16     int month;
    17     int day;
    18     int year;
    19 
    20 };
    21 
    22 Date::Date(int m,int d,int y):month(m),day(d),year(y){}
    23 
    24 Date::Date(int m,int d):month(m),day(d)
    25 {year=2005;}
    26 
    27 Date::Date(int m):month(m)
    28 {day=1;year=2005;}
    29 
    30 Date::Date()
    31 {month=1;day=1;year=2005;}
    32 
    33 void Date::display()
    34 {
    35     cout<<month<<"/"<<day<<"/"<<year<<endl;
    36 }
    37 
    38 int main()
    39 {
    40     Date d1(10,13,2005);
    41     Date d2(10,30,2005);
    42     Date d3(10,1,2005);
    43     Date d4(1,1,2005);
    44     d1.display();
    45     d2.display();
    46     d3.display();
    47     d4.display();
    48     system("pause");
    49     //解决闪屏的代码
    50     return 0;
    51 }

    运行结果:

    使用该错误修改方法,实际上就只有一个构造函数起作用,注释其它三个构造函数,输出结果不变,调用原理是多次调用同一个函数,而不是分别调用各自的构造函数。

    源代码:

    #include<iostream>
    //原题的#include<iostream.h>写法错误
    #include<stdlib.h>
    //用于解决闪屏的头文件
    using namespace std;
    //原题缺少该行代码,用于输入cin和输出cout
    class Date{
    public:
        Date(int x=1,int y=1,int z=2005);
        void display();
    private:
        int month;
        int day;
        int year;
    
    };
    
    Date::Date(int m,int d,int y):month(m),day(d),year(y){}
    
    void Date::display()
    {
        cout<<month<<"/"<<day<<"/"<<year<<endl;
    }
    
    int main()
    {
        Date d1(10,13,2005);
        Date d2(10,30,2005);
        Date d3(10,1,2005);
        Date d4(1,1,2005);
        d1.display();
        d2.display();
        d3.display();
        d4.display();
        system("pause");
        //解决闪屏的代码
        return 0;
    }

    4.建立一个对象数组,内放5个学生的数据(学号,成绩),用指针指向数组首元素,输出1,3,5个学生的数据。

    源代码及解析:

     1 #include<iostream>
     2 #include<stdlib.h>
     3 using namespace std;
     4 class Student
     5 {
     6 public:
     7     //学生数据的构造函数
     8     Student(int sno,int grade):Sno(sno),Grade(grade){}
     9     void display();
    10     int Sno;
    11     int Grade;
    12 };
    13 
    14 void Student::display()
    15 {
    16     cout<<Sno<<' '<<Grade<<endl;
    17 }
    18 
    19 int main()
    20 {
    21     //五个学生的数据信息
    22     Student stu[5]={
    23     Student(1001,89),
    24     Student(1002,90),
    25     Student(1003,91),
    26     Student(1004,92),
    27     Student(1005,93),
    28     };
    29     //定义指针
    30     void(Student::*p1)();
    31     p1=&Student::display;
    32     //调用函数
    33     (stu[0].*p1)();
    34     (stu[2].*p1)();
    35     (stu[4].*p1)();
    36     system("pause");
    37     return 0;
    38     
    39     
    40 }

    运行结果:

  • 相关阅读:
    Jquery判断数组中是否包含某个元素$.inArray()的用法
    localStorage,sessionStorage,cookie使用场景和区别
    解决发送邮件在本地测试成功,在腾讯服务器上测试失败的问题
    phpStudy安装教程
    使用phpStudy运行伊人集项目
    使用phpStudyy运行tipask
    linux sudo命令
    PHP 判断数组是否为空的5大方法
    校验两次密码一致的js代码
    一个漂亮的php验证码类
  • 原文地址:https://www.cnblogs.com/chenting123456789/p/11661795.html
Copyright © 2011-2022 走看看