第4章  类与对象

4-9设计并测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角坐标,根据坐标能计算矩形的面积。

#include <iostream>
using namespace std;
class Rectangle{private:double x,y;public:void setPoint(){cin>>x>>y;}double area(const Rectangle &t ){return (x-t.x)*(y-t.y);}
};
int main() {Rectangle a,b;cout<<"请输入左下角的横坐标、纵坐标:"; a.setPoint();  // 这里读入左下角的横坐标、纵坐标cout<<"请输入右上角的横坐标、纵坐标:";b.setPoint();  // 这里读入右上角的横坐标、纵坐标cout << b.area(a) << endl;return 0;
}

4-10设计一个用于人事管理的“人员”类。由于考虑到通用性,这里只抽象出所有类型人员都具有的属性:编号、性别、出生日期、身份证号等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、复制构造函数、内联成员函数、带默认参数值的成员函数、类的组合。

#include <iostream>
using namespace std;class date{private:int year, month, day;public:date() {                //这里初始化为2000年1月1日 year = 2000;month = 1;day = 1;}date(const date& d){      //拷贝函数 year = d.year; month = d.month; day = d.day;}~date() {}void setdate(){cout << "请输入日期年、月、日:" << endl;cin >> year >> month >> day;}void alterdate(int x = 0, int y = 0, int z = 0){year = x;month = y;day = z;}void display(){cout << "出生日期:" << year << "年" << month << "月" << day << "日" << endl;}
};class people {private:int num;string sex;date birthday;string ID;public:people(date b):birthday(b) {int n = 0;string sx,I;num = n; sex = sx; ID = I;}people(const people& p):birthday(p.birthday) { num = p.num; sex = p.sex; ID = p.ID; }~people() {};void setpeople(); void display();
};
void people::setpeople()
{int n; string d; date a; string I;a.setdate();cout << "请输入人员编号" << endl;cin >> n;cout << "请输入人员性别" << endl;cin >> d;cout << "请输入身份证号" << endl;cin >> I;birthday = a;num = n;sex = d;ID = I;
}
inline void people::display() //内联函数,免去函数调用的复杂操作
{cout<<endl; cout << "编号:"<< num <<endl<< "性别:"<< sex <<endl<<"身份证号:" << ID <<endl;birthday.display();
}
int main() {date b;people p(b);p.setpeople();p.display();people q(p);    //复制拷贝 q.display();return 0;
}

4-11定义并实现一个矩形类,有长、宽两个属性,由成员函数计算矩形的面积。

#include<iostream>
using namespace std;class Rectangle{private:float leng,wide;public:Rectangle(float l,float w){leng=l;wide=w;}~Rectangle(){}float getArea(){return leng*wide;}
};int main()
{float x,y;cout<<"请输入矩形的长度和宽度:";cin>>x>>y;Rectangle r(x,y);cout<<"矩形面积为:"<<r.getArea()<<endl; return 0;
}

4-12定义一个Data Type(数据类型)类,能处理包含字符型、整型、浮点型的数据,给出其构造函数

#include<iostream>
using namespace std;class DataType{private:int a;float b;char c;public:DataType(int i,float j,char k){a=i;b=j;c=k;}void print(){cout<<a<<" "<<b<<" "<<c<<" "<<endl; }
};int main()
{DataType d( 3, 5.6, 'a');d.print();return 0;
}

4-13定义一个Circle类,有数据成员radius(半径),成员函数getArea(),计算圆的面积,构造一个Circle的对象进行测试。

#include<iostream>
using namespace std;class Circle{private:float R; public:Circle(float r){R=r;}~Circle(){} float getArea(){return 3.14*R*R;}
};int main()
{float r;cout<<"请输入圆的半径:";cin>>r;Circle c(r);cout<<"该圆的面积为:"<<c.getArea()<<endl; return 0;
}

4-14定义一个Tree(树)类,有成员ages(树龄),成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。

#include<iostream>
using namespace std;class tree
{private:int ages; public:tree(){ ages = 0;}void grow(int years);void age();
};void tree::grow(int years)
{ages+=years;
}void tree::age()
{cout << ages <<endl;
}int main()
{tree a;int i;cout << "Please enter the tree age:" << endl;cin >> i;a.grow(i);cout << "The age of the tree is:" << endl;a.age();return 0;
}

4-19编写一个名为CPU的类,描述一个CPU的以下信息:时钟频率,最大不会超过3000MHZ;字长,可以是32位或是64位;核数,可以是单核、双核或四核;是否支持超线程。各项信息要求使用位域来表示。通过输出sizeof(CPU)来观察该类所占的字节数。

#include <iostream>
using namespace std;class CPU{public:CPU(int i, int j, string m, bool n)      //构造函数{Hz = i;zichang = j;he = m;xiancheng = n;}void show()     //打印{cout << "时钟频率:"<< Hz <<"MHz"<< endl;cout << "字长:"<< zichang <<"位"<< endl;cout << "核数:"<<he << endl;cout << "是否支持超线程:";if (xiancheng == 1)cout << "true" << endl;elsecout << "false" << endl;} private:int Hz:32;int zichang:16;string he;bool xiancheng:8;
};int main()
{CPU  c(2000, 64, "四核", false);c.show();cout << "类所占的字节数:" << sizeof(CPU) << endl;return 0;
}

4-20定义一个负数类Complex,使得下面的代码能够工作。

Complex  c1(3,5);              //用复数3+5i初始化c1

Complex  c2=4.5;              //用实数4.5初始化c2

C1.add(c2);                    //将c1与C2相加,结果保存在c1中

C1.show();                   //将c1输出(这时的结果应该是7.5+5i);

#include <iostream>
using namespace std;class Complex{
private:float re, im;
public:Complex(float r, float i=0){re=r;im=i;}void add(Complex com){re=re+com.re;im=im+com.im;}void show(){cout<<re<<"+"<<im<<"i"<<endl;}};int main()
{Complex c1(3,5);   Complex c2=4.5;     c1.show();c1.add(c2);   c1.show(); return 0;
}

最后的最后,再来分享一些小干货:

  1. 在前面的学习中,我们可以发现在定义变量时赋初值,可以有两种方式。比如要给int型变量赋值为5,可以是   或者是  
  2. 函数在定义时可以预先声明默认的形参值,调用时如果事先给出实参,则按实参的值,否则按预先声明的形参默认值,这就是带默认值的函数。比如上面最后一道题的构造函数Complex(float r, float i=0) ,i值默认为0。
  3. 但要注意是,有默认值的形参必须在无默认值形参后面,即Complex(float r=0,float i) 就不行。因为假设你不想输入r值,想输入i值,那么你输入的那一个值编译器会从左到右识别形参,然后就赋给了第一个值r了,这样就不符合我们的预期结果。所以设置默认形参的值时,应该从右到左进行设置。

本专栏为本人大二C++课程的习题作业和一些学习经验的分享,供大家参考学习。如有侵权请立即与我联系,我将及时处理。


参考书籍为:C++语言程序设计 第五版 -清华大学出版社- 郑莉,董渊、C++语言程序设计 第五版 -清华大学出版社- 郑莉,董渊(学生用书)

编译环境:Visual Studio 2019、Dev-C++

欢迎关注我的微信公众号,分享一些有趣的知识:程序猿的茶水间

C++语言程序设计第五版 - 郑莉(第四章课后习题)相关推荐

  1. C++语言程序设计第五版 - 郑莉(第九章课后习题)

    第9章  群体类和群体数据的组织 9-1 编写程序提示用户输入一个班级中的学生人数 n,再依次提示用户输入 n 个人在课程 A 中的考试成绩,然后计算出平均成绩,显示出来.请使用本书第 9 章中的数组 ...

  2. C++语言程序设计第五版 - 郑莉(第二章课后习题)

    第2章  C++简单程序设计 2-25 编写一个完整的程序,实现功能:向用户提问"现在正在下雨吗?",提示用户输入Y 或N.若输入为Y,显示"现在正在下雨.": ...

  3. C++语言程序设计第五版 - 郑莉(第八章课后习题)

    第8章 多态性 8-4 请编写一个计数器 Counter类,对其重载运算符"+". #include <iostream> using namespace std;cl ...

  4. 第三章 函数 C++语言程序设计第五版 - 郑莉

    本专栏为C++学习笔记,参考书籍为:C++语言程序设计 第五版 -清华大学出版社- 郑莉 B站视频:https://space.bilibili.com/702528832/video PPT与代码已 ...

  5. C++语言程序设计第五版 - 郑莉-绪论(一)

    本专栏为C++学习笔记,参考书籍为:C++语言程序设计 第五版 -清华大学出版社- 郑莉 B站视频:https://space.bilibili.com/702528832/video PPT与代码已 ...

  6. C++语言程序设计第五版 - 郑莉(第六章课后习题)

    第6章   数组.指针与字符串 6-20 实现一个名为 SimpleCircle 的简单圆类.其数据成员 int* itsRadius 为一个指向其半径值的指针,存放其半径值.设计对数据成员的各种操作 ...

  7. C++语言程序设计第五版 - 郑莉(第七章课后习题)

    第7章  继承与派生 7-5 定义一个基类 Shape,在此基础上派生出 Rectangle 和 Circle,二者都有 getArea()函数计算对象的面积.使用 Rectangle类创建一个派生类 ...

  8. C++语言程序设计第五版 - 郑莉(第五章课后习题)

    第5章  数据的共享与保护 5-7定义一个Cat类,拥有静态数据成员 numOfCats,记录Cat的个体数目:静态成员函数getNumOfCats(),读取numOfCats.设计程序测试这个类,体 ...

  9. C++语言程序设计第五版 - 郑莉(第十一章课后习题)

    第11章  流类库与输入输出 11-3 使用 I/O 流以文本方式建立一个文件 test1.txt,写入字符"已成功写入文件!",用其他字处理程序(例如 Windows 的记事本程 ...

最新文章

  1. node.js浅入深出---fs模块的stat判断是否为文件夹
  2. 字节跳动Java高级工程师:java队列实现停车场出入
  3. android SurfaceView
  4. java单例设计模式
  5. MapReduce Java API实例-统计平均成绩
  6. CV_Sicong Liu
  7. c语言实现字母转化为unicode码,用C语言实现中文到unicode码的转换
  8. java中PL层_安装pljava - RuralHunter的个人空间 - OSCHINA - 中文开源技术交流社区
  9. mysql自带的卸数工具_数据库卸数必备工具下载-数据库数据导出工具(DBexport)下载v1.3官方版-西西软件下载...
  10. 【华为云技术分享】在 K8S 大规模场景下 Service 性能如何优化?
  11. 用VScode配置Python开发环境引用
  12. Java讲课笔记07:计数循环与嵌套循环
  13. 前端与移动开发之vue-day3(4)
  14. Atitit mvc之道 attilax著 以vue为例 1. Atitti vue的几大概念 1 1.1. 声明式渲染 1 1.2. 条件与循环 2 1.3. 处理用户输入 click事件 2 1
  15. 在eclipse环境中配置hadoop开发环境遇到的问题
  16. java面试题,各大企业常见的java笔试题及答案(精华)
  17. 解决du df结果不一样的问题
  18. java 画折线图_jfreechart画折线图的方法
  19. 大数据比较 同比与环比的区别
  20. 玩客云刷机(2022-3-19亲测)

热门文章

  1. 周爱民先生力作《Delphi源代码分析》持续好评热卖中!!
  2. 这样定义通用人工智能
  3. php twig中文手册,安装 · Twig 中文文档 · 看云
  4. 学习--unix信号
  5. 前端面试题 - 面试
  6. oracle中间人投毒漏洞,Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)的完美解决方法...
  7. 互联网早报:腾讯推出“微小号”,用虚拟手机号拨打电话收发短信
  8. Converting Phase Noise to Time Jitter
  9. 学习java的ssh
  10. 【吉大刘大有数据结构绿皮书】向LinkedList类中增加一个函数Contrary,功能为将其所有结点按相反次序链接。