C++面向对象程序设计第三章习题答案解析
整理一下自己写的作业,供考试前复习用,哈哈
进入正题!!!
题目:
2.分析下面的程序,写出其运行时的输出结果
这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释
#include<iostream>
//原题的#include<iostream.h>写法错误
#include<stdlib.h>
//用于解决闪屏的头文件
using namespace std;
//原题缺少该行代码,用于输入cin和输出cout
class Date{
public:
Date(int,int,int);
Date(int,int);
Date(int);
Date(); void display();
private:
int month;
int day;
int year; }; Date::Date(int m,int d,int y):month(m),day(d),year(y){} Date::Date(int m,int d):month(m),day(d)
{year=;} Date::Date(int m):month(m)
{day=;year=;} Date::Date()
{month=;day=;year=;} void Date::display()
{
cout<<month<<"/"<<day<<"/"<<year<<endl;
} int main()
{
Date d1(,,);
Date d2(,);
Date d3();
Date d4;
d1.display();
d2.display();
d3.display();
d4.display();
system("pause");
//解决闪屏的代码
return ;
}
运行结果:

3.如果将第2题中程序的第四行改为用默认参数,即
Date(int =1,int =1,int =2005);
分析程序有无问题。上机编译,分析出错信息,修改程序使之能通过编译。要求保留上面一行给出的构造函数,同时能输出与第2 题程序相同的输出结果。
解析:在第2题的代码上进行修改。
错误点:

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

使用该错误修改方法,实际上就只有一个构造函数起作用,注释其它三个构造函数,输出结果不变,调用原理是多次调用同一个函数,而不是分别调用各自的构造函数。
源代码:
#include<iostream>
//原题的#include<iostream.h>写法错误
#include<stdlib.h>
//用于解决闪屏的头文件
using namespace std;
//原题缺少该行代码,用于输入cin和输出cout
class Date{
public:
Date(int x=,int y=,int z=);
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(,,);
Date d2(,,);
Date d3(,,);
Date d4(,,);
d1.display();
d2.display();
d3.display();
d4.display();
system("pause");
//解决闪屏的代码
return ;
}
4.建立一个对象数组,内放5个学生的数据(学号,成绩),用指针指向数组首元素,输出1,3,5个学生的数据。
源代码及解析:
#include<iostream>
#include<stdlib.h>
using namespace std;
class Student
{
public:
//学生数据的构造函数
Student(int sno,int grade):Sno(sno),Grade(grade){}
void display();
int Sno;
int Grade;
}; void Student::display()
{
cout<<Sno<<' '<<Grade<<endl;
} int main()
{
//五个学生的数据信息
Student stu[]={
Student(,),
Student(,),
Student(,),
Student(,),
Student(,),
};
//定义指针
void(Student::*p1)();
p1=&Student::display;
//调用函数
(stu[].*p1)();
(stu[].*p1)();
(stu[].*p1)();
system("pause");
return ; }
运行结果:

C++面向对象程序设计第三章习题答案解析的更多相关文章
- Reinforcement Learning by Sutton 第三章习题答案
好不容易写完了 想看全部的欢迎点击下面的github https://github.com/LyWangPX/Solutions-of-Reinforcement-Learning-An-Introd ...
- Java面向对象程序设计第9章1-9
Java面向对象程序设计第9章1-9 1. 线程和进程的联系和区别是什么? 联系: 一个进程可以包括多个线程. 区别: 进程: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统 ...
- 统计学习导论:基于R应用——第三章习题
第三章习题 部分证明题未给出答案 1. 表3.4中,零假设是指三种形式的广告对TV的销量没什么影响.而电视广告和收音机广告的P值小说明,原假设是错的,也就是电视广告和收音机广告均对TV的销量有影响:报 ...
- Java面向对象程序设计第14章3-8和第15章6
Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...
- Java面向对象程序设计第8章3-5
Java面向对象程序设计第8章3-5 3.String类型有什么特点? 一旦赋值,便不能更改其指向的字符对象 如果更改,则会指向一个新的字符对象 不能为null 4.String什么时候进行值比较,什 ...
- Java面向对象程序设计第7章1-8
Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...
- PythonCrashCourse 第三章习题
PythonCrashCourse 第三章习题 3.1 将一些朋友的姓名存储在一个列表中,并将其命名为names.依次访问该列表中的每个元素,从而将每个朋友的姓名都打印出来 names = ['lih ...
- C++面向程序设计(第二版)课后习题答案解析
最近没什么心情整理零散的知识点,就整理一下第四章的课后习题答案. 1.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算.将运算符函数重载为非成员函数,非友元的普通函数.编程序, ...
- 周志华-机器学习西瓜书-第三章习题3.5 LDA
本文为周志华机器学习西瓜书第三章课后习题3.5答案,编程实现线性判别分析LDA,数据集为书本第89页的数据 首先介绍LDA算法流程: LDA的一个手工计算数学实例: 课后习题的代码: # coding ...
随机推荐
- PAT(B) 1075 链表元素分类(Java)
题目链接:1075 链表元素分类 (25 point(s)) 题目描述 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大 ...
- const指针和指向常量的指针
先看下面六种写法: . const int p; . const int *p; . int const* p; . int * const p; . const int * const p; . i ...
- DFS解决八皇后问题
2019-07-29 16:49:15 #include <bits/stdc++.h> using namespace std; ][]; int tot; int check(int ...
- docker深入学习三
docker学习三:network docker支持容器之间的网络通信,docker的网络通信方式有以下五种: bridge docker 默认的网络驱动,如果不指定网络驱动,docker就会创建一个 ...
- Vue.js 2.x render 渲染函数 & JSX
Vue.js 2.x render 渲染函数 & JSX Vue绝大多数情况下使用template创建 HTML.但是比如一些重复性比较高的场景,需要运用 JavaScript 的完全编程能力 ...
- 使用Git管理版本
原文地址:廖雪峰的网站 Git 是目前世界上最先进的分布式版本控制系统 Git 的历史 集中式 vs 分布式 集中式的版本库是集中存放在中央服务器的.缺点是必须联网.网速慢的情况就会让人抓狂. 分布式 ...
- Elasticsearch-6.7.0系列(七)SpringCloud连接ES集群,使用ES用户名密码
pom.xml代码: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...
- SpringICO和DI区别
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- .net core使用ocelot---第三篇 日志记录
简介 .net core使用ocelot---第一篇 简单使用 .net core使用ocelot---第二篇 身份验证使用 上篇介绍使用asp.net core 创建API网关.本文将介绍Ocelo ...
- memcpy 速度测试
1. 小米8代i5 3840X2160X4 7.77ms 即34Gbps
