c++第三章作业答案,c++第八章课后题答案

  c++第三章作业答案,c++第八章课后题答案

  文章目录0 编译运行本章程序1 编写一个自我复制程序,该程序没有输入,在运行时复制一份自己的源代码,并将代码写入输入流。

  0 编译运行本章程序头文件:

  //

  //由MacBook Pro于2020-03-09创建。

  //

  #ifndef ACM_TEST_H

  #定义ACM _测试_H

  #包括

  #包括

  #包括

  #包括

  //选择何时共享数据句柄

  模板类T类Ptr{

  公共:

  Ptr():p(0),refptr(new size_t(1)){}

  Ptr(T* t):p(t),refptr(new size_t(1)){}

  Ptr(const Ptr h):p(h.p),ref Ptr(h . ref Ptr){ * ref Ptr;}

  光电带读数机(photoelectric tape reader)运算符=(常量指针rhs){

  * RHS。ref ptr

  if( - *refptr==0){

  删除(参考指针);

  删除(p);

  }

  ref ptr=RHS。ref ptr

  p=rhs.p

  返回*这个

  }

  ~Ptr()

  if( - *refptr==0){

  删除(参考指针);

  删除(p);

  }

  }

  运算符bool()常量{

  返回p;

  }

  测试运算符*()常量{

  如果(p){

  return * p;

  }

  throw STD:runtime _ error( unbound Ref _ handle );

  }

  T*运算符-()常量{

  如果(p){

  返回p;

  }

  throw STD:runtime _ error( unbound Ref _ handle );

  }

  私人:

  t * p;

  STD:size _ t * ref ptr;

  };

  班级图片;

  Pic_base类{

  朋友标准:ostream运算符(标准:ostream,常量图片);

  友类框架_图片

  友类HCat _ Pic

  友类VCat _ Pic;

  友类字符串_图片

  //没有公共接口

  typedef STD:vector STD:string:size _ type ht _ SZ;//高

  typedef STD:string:size _ type wd _ SZ;//宽

  //抽象基类(纯虚拟性可以被继承)

  虚拟wd _ SZ width()const=0;//纯虚函数,相等于隐式声明该类没有其相应的对象

  虚拟ht _ SZ height()const=0;//编译器会禁止为这个类生成相应的对象

  虚拟空的显示(std:ostream,ht_sz,bool)const=0;

  受保护:

  //这个函数不隶属于类的某个对象

  //静态成员:减少定义全局函数或变量

  //定义为静态函数,使得在其他地方也可以定义衬垫

  静态空焊盘(std:ostream,wd_sz,wd _ SZ);

  公共:

  virtual ~Pic_base(){}

  };

  //公有接口类和操作

  班级图片{

  朋友标准:ostream运算符(标准:ostream,常量图片);

  好友画框(常量图片);

  好友图片hcat(常量图片,常量图片);

  好友图片vcat(常量图片,常量图片);

  公共:

  图片(const STD:vector STD:string=STD:vector STD:string())。

  //由于没有显示声明为明确的

  //因此允许出现下面的语句

  /*

  向量vs;

  图片p=vs

  */

  私人:

  ptr Pic _ base p;

  图片(Pic_base* ptr):p(ptr){ }

  };

  //对画类型对象进行操作

  画框(const图片);

  图片hcat(常量图片,常量图片);

  图片vcat(常量图片,常量图片);

  标准:牡蛎运算符(std:ostream,const图片);

  //图形数据

  类String_Pic:public Pic_base{

  好友画框(常量图片);

  好友类图片;

  标准:矢量标准:字符串数据;

  string _ Pic(const STD:vector STD:string v):data(v){ }

  ht _ SZ height()const {返回数据。size();}

  wd _ SZ width()const;

  空的显示(std:ostream,ht_sz,bool)const;

  };

  //加边框

  类帧_图片:公共Pic_base{

  好友画框(常量图片);

  ptr Pic _ base p;

  frame _ Pic(const Ptr Pic _ base Pic):p(Pic){ }

  wd _ SZ width()const { return p-width()4;}

  ht _ SZ height()const { return p-height()4;}

  空的显示(std:ostream,ht_sz,bool)const;

  };

  //上下连接

  VCat _图片类:公共Pic_base{

  好友图片vcat(常量图片,常量图片);

  Ptr Pic_base顶部、底部

  VCat_Pic(常量指针Pic_base t,常量指针Pic_base b):

  顶部(t),底部(b){}

  wd_sz width() const{

  return std:max(顶部宽度()、底部宽度());

  }

  ht_sz高度()常数{

  返回top-height()bottom-height();

  }

  空的显示(std:ostream,ht_sz,bool)const;

  };

  HCat_Pic类:公共Pic_base{

  好友图片hcat(常量图片,常量图片);

  Ptr Pic_base左,右;

  HCat_Pic(const Ptr Pic_base l,const Ptr Pic_base r):left(l),right(r){}

  wd_sz width() const{

  返回left-width()right-width();

  }

  ht_sz高度()常数{

  return std:max(左高()、右高());

  }

  空的显示(std:ostream,ht_sz,bool)const;

  };

  #endif //ACM_TEST_H//

  //由MacBook Pro于2020-01-13创建。

  //

  #ifndef ACM_Student_info

  #定义ACM _学生信息

  #包括

  #包括

  #包括

  //结构学生信息{

  //std:字符串名称;

  //双期中,期末;

  //std:矢量作业;

  //

  //STD:istream read(STD:istream

  //double garde()const;

  //};

  班级学生信息{

  公共:

  学生信息();//构造一个空的学生信息对象

  student _ info(STD:istream);//读一个流从而构造一个对象

  bool vaild() const{ return!工作。empty();}//检查对象是否为空

  双等级()常数

  STD:istream read(STD:istream);

  STD:string name()const { return n;}//存取器:容许对一部分数据结构的进行访问

  私人:

  STD:string n;

  双期中考,期末考;

  标准:向量双作业;

  };

  bool compare(const Student_info,const Student _ info);

  STD:istream read _ HW(STD:istream,STD:vector double);

  双等级(双、双、双);

  double grade(double,double,const STD:vector double);

  #endif测试程序:

  #包括

  #包括

  #包括

  #包括

  #包括

  #包括

  #包含" test.h "

  #include Student_info.h

  #包含" h级"

  使用STD:CIN;使用STD:endl;

  使用STD:cout;

  使用STD:ostream;

  使用STD:string;

  使用STD:vector;

  使用STD:istream;

  使用STD:domain _ error;

  使用STD:sort;

  void Pic _ base:pad(STD:ostream OS,wd_sz beg,wd_sz end){

  而(求!=end){

  OS

  求;

  }

  }

  Pic _ base:wd _ SZ String _ Pic:width()const {

  pic _ base:wd _ SZ n=0;

  for(Pic _ base:ht _ SZ I=0;我!=数据。size();i) {

  n=std:max(n,data[i]).size());

  }

  返回n;

  }

  void String _ Pic:display(ostream OS,ht_sz row,bool do_pad) const {

  wd _ SZ start=0;

  //如果排没有超过范围,就输出第排行

  如果(行高()){

  骨数据[row];

  start=data[row].size();

  }

  //如有必要,补齐输出各行

  if(do_pad){

  pad(os,start,width());

  }

  }

  void Frame _ Pic:display(ostream OS,ht_sz row,bool do_pad) const {

  if(row=height()){

  //超出范围

  if(do_pad){

  pad(os,0,width());

  }

  }否则{

  if(row==0 row==height() -1){

  //最顶行或最低行

  骨字符串(width(), * );

  } else if(row==1 row==height()-2){

  //在第二行或倒数第二行

  OS " *

  pad(os,1,width()-1);

  OS " *

  }否则{

  //在内部图形

  OS " *

  p- display(os,row - 2,true);

  OS " *

  }

  }

  }

  void VCat _ Pic:display(ostream OS,Pic_base:ht_sz row,bool do_pad) const {

  wd _ SZ w=0;

  if(row top- height()){

  //处于上面的子图形中

  top- display(os,row,do _ pad);

  w=顶部宽度();

  }else if(行高()){

  //处于下面的子图形中

  bottom- display(os,row - top- height(),do _ pad);

  w=底部宽度();

  }

  if(do_pad){

  pad(os,w,width());

  }

  }

  void HCat _ Pic:display(ostream OS,Pic_base:ht_sz row,bool do_pad) const {

  left- display(os,row,do _ pad row right-height());

  右显示(os,row,do _ pad);

  }

  相框(固定图片){

  返回新的Frame _ Pic(图片。p);

  }

  图像hcat(恒定图像我,恒定图像r){

  返回新的HCat_Pic(l.p,r . p);

  }

  图像vcat(恒定图像t,恒定图像b){

  返回新VCat_Pic(t.p,b . p);

  }

  Picture:Picture(const STD:vector STD:String v):p(new String _ Pic(v)){ }

  牡蛎运算符(ostream os,const Picture图片){

  const Pic _ base:ht _ SZ ht=picture。p-height();

  for(Pic _ base:ht _ SZ I=0;我!=hti) {

  picture.p- display(os,I,false);

  os endl

  }

  返回OS;

  }

  //默认构造函数

  学生信息:学生信息():期中(0),期末(0){ }

  //带参构造函数

  Student _ info:Student _ info(istream is){ read(is);}

  //按照字母顺序排列学生

  布尔比较(常量学生信息x,常量学生信息y){

  返回x . name()y . name();

  }

  istream Student _ info:read(istream in){

  期中期末考试;

  读取硬件(在,作业);

  返回;

  }

  istream read_hw(istream in,vector double hw){

  如果(在){

  硬件。clear();

  双x;

  而(在x中){

  硬件。push _ back(x);

  }

  英寸clear();

  }

  返回;

  }

  双中值(向量双向量){

  typedef vector double:size _ type vec _ SZ;

  vec _ SZ size=vec。size();

  if(size==0){

  抛出domain_error(空向量的中值);

  }

  sort(vec.begin()、vec。end());

  vec _ SZ mid=size/2;

  返回大小% 2==0?(vec[mid]vec[mid-1])/2:vec[mid];

  }

  double Student _ info:grade()const {

  //:使用这个名称的某一个版本,而所使用的这个版本不能称为任何事物的成员

  返回:成绩(期中、期末、作业);

  }

  双倍分数(双倍期中,双倍期末,常数向量双倍硬件){

  if(hw.size()==0)

  抛出domain_error(学生没有做作业);

  回报等级(期中、期末、中位数(HW));//如果家庭作业非空,则调用三年级

  }//2级

  双倍分数(期中双倍,期末双倍,硬件双倍){

  返回期中* 0.2期末* 0.4硬件* 0.4

  }

  图片直方图(常量向量学生信息学生){

  图片名称;

  图片等级;

  for(vector Student _ info:const _ iterator it=students。begin();它!=学生。end();它){

  姓名=vcat(姓名,向量字符串(1,it-name());

  grades=vcat(grades,vector string (1, string(it- grade()/5,=)));

  }

  返回hcat(姓名、成绩);

  }

  int main(int argc,char** argv){

  矢量学生信息学生;

  学生信息;

  (斯莱德(cin)){

  学生。_ back

  }

  排序(students.begin()、students.end()、compare);

  标准输出帧(直方图(学生))endl

  返回0;

  }1 编写一个自我复制程序,该程序没有输入,在运行时复制一份自己的源代码,并将代码写入输入流。包含

  int main(){ char * s= # include % cint main(){ char * s=% c % s % c;printf(第10,34,34节);返回0;};printf(第10,34,34节);返回0;}结果:(由于长度原因不能一次截图完整)

  右边的部分

  C版本:

  #包括

  #包括

  使用命名空间标准

  int main(){ string a= # include T # include T使用命名空间STD tint main(){ string a=;a[19]=a[37]=a[58]=10;couta[19]=a[37]=a[58]=10;cout a.substr(0,80)(char)34;a[19]=a[37]=a[58]=84;cout a(char)34a。substr(80);返回0;}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: