类的子对象的调用(类的组合方面)

  • 两个离散的类使用组合类组合到一起,如何使用内嵌对象。

  • //通讯录类
    class Addressbook
    {
    public:
    string studentname;
    string studentclass;
    string mobilephone;
    string homephone;
    string emailaddress;
    string homeaddress;
    string zipcode;
    //定义类的默认构造函数
    Addressbook()
    {

      studentname="";
      studentclass="";
      mobilephone="";
      homephone="";
      emailaddress="";
      homeaddress="";
      zipcode="";
    

    }
    //定义类的带参数的构造函数
    Addressbook(string t,string u,string v,string w,string x,string y,string z)
    {

      studentname=t;
      studentclass=u;
      mobilephone=v;
      homephone=w;
      emailaddress=x;
      homeaddress=y;
      zipcode=z;
    

    }
    //写入文件
    void write(ofstream &out)
    {

      //对string进行写入
      int size=studentname.size();      //写入姓名
      out.write((char *)(&size),sizeof(size));  
      out.write(studentname.c_str(), size+1);
      {
          int size=studentclass.size();      //写入班级
          out.write((char *)(&size),sizeof(size));  
          out.write(studentclass.c_str(), size+1);
          {
              int size=mobilephone.size();      //写入手机电话
              out.write((char *)(&size),sizeof(size));
              out.write(mobilephone.c_str(), size+1);
              {
                  int size=homephone.size();      //写入家庭电话
                  out.write((char *)(&size),sizeof(size));
                  out.write(homephone.c_str(), size+1);
                  {
                      int size=emailaddress.size();      //写入电子邮箱
                      out.write((char *)(&size),sizeof(size));
                      out.write(emailaddress.c_str(), size+1);
                      {
                          int size=homeaddress.size();      //写入家庭地址
                          out.write((char *)(&size),sizeof(size));
                          out.write(homeaddress.c_str(), size+1);
                          {
                              int size=zipcode.size();      //写入邮编
                              out.write((char *)(&size),sizeof(size));
                              out.write(zipcode.c_str(), size+1);
                          }
                      }
                  }
              }
          }
      }
    

    }
    //读取文件
    void read(ifstream &in)
    {

      //对string进行读取
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          studentname=p;      //
          delete[] p;
      }
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          studentclass=p;      //
          delete[] p;
      }
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          mobilephone=p;      //
          delete[] p;
      }
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          homephone=p;      //
          delete[] p;
      }
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          emailaddress=p;      //
          delete[] p;
      }
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          homeaddress=p;      //
          delete[] p;
      }
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          zipcode=p;      //
          delete[] p;
      }
    

    }
    };
    //班级类
    class Class
    {
    public:
    string classname;
    string classnumber;
    //定义类的默认构造函数
    Class()
    {

      classname="";
      classnumber="";
    

    }
    //定义类的带参数的构造函数
    Class(string r,string s)
    {

      classname=r;
      classnumber=s;
    

    }
    //写入文件
    void write(ofstream &out)
    {

      //对string进行写入
      int size=classname.size();      //写入班级名称
      out.write((char *)(&size),sizeof(size));  
      out.write(classname.c_str(), size+1);
      {
          int size=classnumber.size();      //写入班级编号
          out.write((char *)(&size),sizeof(size));  
          out.write(classnumber.c_str(), size+1);
      }
    

    }
    //读取文件
    void read(ifstream &in)
    {

      //对string进行读取
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          classname=p;      //
          delete[] p;
      }
      {
          int len=0;
          char *p=0;
          in.read((char *)(&len), sizeof(len));
          p=new char [len+1];      //
          in.read(p, len+1);      //
          classnumber=p;      //
          delete[] p;
      }
    

    }
    };
    //管理通讯录信息类
    class Manageaddressbook
    {
    public:
    vector lista; //列表,用于保存通讯录对象信息
    //添加
    void add()
    {

      readfile();      //先从文件中读取数据
      Addressbook a;
      cout<<"请输入通讯录信息:"<<endl;
      cout<<"姓名:";
      cin>>a.studentname;
      cout<<"班级:";
      cin>>a.studentclass;
      cout<<"手机电话:";
      cin>>a.mobilephone;
      cout<<"家庭电话:";
      cin>>a.homephone;
      cout<<"电子邮箱:";
      cin>>a.emailaddress;
      cout<<"家庭住址:";
      cin>>a.homeaddress;
      cout<<"邮编:";
      cin>>a.zipcode;
      lista.push_back(a);      //把信息添加到列表
      savefile();      //将数据保存到文件中
    

    }
    //删除
    void del()
    {

      cout<<"请输入要删除的信息的学生姓名:";
      string studentname;
      cin>>studentname;
      //从列表里删除通讯录信息
      for(vector<Addressbook>::iterator iter=lista.begin();iter!=lista.end();)
      {
          if(studentname==(*iter).studentname)
          {
              iter=lista.erase(iter);
              cout<<studentname<<"已经删除"<<endl;
          }
          else
          {
              iter++;
          }
      }
      savefile();
    

    }
    //修改
    void modify()
    {

      cout<<"请输入要修改的信息的学生姓名:";
      string studentname;
      cin>>studentname;
      for(int i=0;i<lista.size();i++)
      {
          if(studentname==lista[i].studentname)
          {
              cout<<"姓名:";
              cin>>lista[i].studentname;
              cout<<"班级:";
              cin>>lista[i].studentclass;
              cout<<"手机电话:";
              cin>>lista[i].mobilephone;
              cout<<"家庭电话:";
              cin>>lista[i].homephone;
              cout<<"电子邮箱:";
              cin>>lista[i].emailaddress;
              cout<<"家庭住址:";
              cin>>lista[i].homeaddress;
              cout<<"邮编:";
              cin>>lista[i].zipcode;
              {
                  cout<<"姓名:"<<lista[i].studentname<<endl;
                  cout<<"班级:"<<lista[i].studentclass<<endl;
                  cout<<"手机电话:"<<lista[i].mobilephone<<endl;
                  cout<<"家庭电话:"<<lista[i].homephone<<endl;
                  cout<<"电子邮箱:"<<lista[i].emailaddress<<endl;
                  cout<<"家庭住址:"<<lista[i].homeaddress<<endl;
                  cout<<"邮编:"<<lista[i].zipcode<<endl;
              }
              cout<<endl;
          }
      }
      savefile();
    

    }
    //查找
    void search()
    {

      cout<<"请输入要查找的信息的学生姓名:";
      string studentname;
      cin>>studentname;
      for(int i=0;i<lista.size();i++)
      {
          if(studentname==lista[i].studentname)
          {
              {
                  cout<<"姓名:"<<lista[i].studentname<<endl;
                  cout<<"班级:"<<lista[i].studentclass<<endl;
                  cout<<"手机电话:"<<lista[i].mobilephone<<endl;
                  cout<<"家庭电话:"<<lista[i].homephone<<endl;
                  cout<<"电子邮箱:"<<lista[i].emailaddress<<endl;
                  cout<<"家庭住址:"<<lista[i].homeaddress<<endl;
                  cout<<"邮编:"<<lista[i].zipcode<<endl;
              }
              cout<<endl;
          }
      }
    

    }
    //把所有通讯录信息保存到文件中
    void savefile()
    {

      ofstream fout("d:\\C++课程设计\\班级通讯录源代码\\addressbookinformation.txt",ios::binary|std::ofstream::trunc);  
      int z=lista.size();
      fout.write((char *) &z,sizeof(z));
      for(int i=0;i<lista.size();i++)
      {
          lista[i].write(fout);
      }
      fout.close();
    

    }
    //从文件中读取所有通讯录信息
    void readfile()
    {

      ifstream fin("d:\\C++课程设计\\班级通讯录源代码\\addressbookinformation.txt",ios::binary);  
      if(fin.is_open())
      {
          int z=0;
          fin.read((char *) &z,sizeof(z));
          cout<<"个数:"<<z<<endl<<endl;
            lista.clear();      //列表清空
          //重新添加列表
          for(int i=0;i<z;i++)
          {
              Addressbook a;
              a.read(fin);   
              lista.push_back(a);
          }
      }
          fin.close();
    

    }
    //显示所有文件信息
    void display()
    {

      cout<<"通讯录信息为:"<<endl;
      readfile();
      for(int i=0;i<lista.size();i++)
      {
          {
              cout<<"姓名:"<<lista[i].studentname<<endl;
              cout<<"班级:"<<lista[i].studentclass<<endl;
              cout<<"手机电话:"<<lista[i].mobilephone<<endl;
              cout<<"家庭电话:"<<lista[i].homephone<<endl;
              cout<<"电子邮箱:"<<lista[i].emailaddress<<endl;
              cout<<"家庭住址:"<<lista[i].homeaddress<<endl;
              cout<<"邮编:"<<lista[i].zipcode<<endl;
          }
          cout<<endl;
      }
    

    }
    //管理班级信息类
    class Manageclass
    {
    public:
    vector lista; //列表,用于保存班级对象信息
    //添加
    void add()
    {

      readfile();      //先从文件中读取数据
      Class a;
      cout<<"请输入班级信息:"<<endl;
      cout<<"名称:";
      cin>>a.classname;
      cout<<"编号:";
      cin>>a.classnumber;
      lista.push_back(a);      //把信息添加到列表
      savefile();      //将数据保存到文件中
    

    }
    //删除
    void del()
    {

      cout<<"请输入要删除的信息的班级名称:";
      string classname;
      cin>>classname;
      //从列表里删除班级信息
      for(vector<Class>::iterator iter=lista.begin();iter!=lista.end();)
      {
          if(classname==(*iter).classname)
          {
              iter=lista.erase(iter);
              cout<<classname<<"已经删除"<<endl;
          }
          else
          {
              iter++;
          }
      }
      savefile();
    

    }
    //修改
    void modify()
    {

      cout<<"请输入要修改的信息的班级名称:";
      string classname;
      cin>>classname;
      for(int i=0;i<lista.size();i++)
      {
          if(classname==lista[i].classname)
          {
              cout<<"名称:";
              cin>>lista[i].classname;
              cout<<"编号:";
              cin>>lista[i].classnumber;
              {
                  cout<<"名称:"<<lista[i].classname<<endl;
                  cout<<"编号:"<<lista[i].classnumber<<endl;
              }
              cout<<endl;
          }
      }
      savefile();
    

    }
    //查找
    void search()
    {

      cout<<"请输入要查找的信息的班级名称:";
      string classname;
      cin>>classname;
      for(int i=0;i<lista.size();i++)
      {
          if(classname==lista[i].classname)
          {
              {
                  cout<<"名称:"<<lista[i].classname<<endl;
                  cout<<"编号:"<<lista[i].classnumber<<endl;
              }
              cout<<endl;
          }
      }
    

    }
    //把所有班级信息保存到文件中
    void savefile()
    {

      ofstream fout("d:\\C++课程设计\\班级通讯录源代码\\classinformation.txt",ios::binary|std::ofstream::trunc);  
      int z=lista.size();
      fout.write((char *) &z,sizeof(z));
      for(int i=0;i<lista.size();i++)
      {
          lista[i].write(fout);
      }
      fout.close();
    

    }
    //从文件中读取所有班级信息
    void readfile()
    {

      ifstream fin("d:\\C++课程设计\\班级通讯录源代码\\classinformation.txt",ios::binary);  
      if(fin.is_open())
      {
          int z=0;
          fin.read((char *) &z,sizeof(z));
          cout<<"个数:"<<z<<endl<<endl;
            lista.clear();      //列表清空
          //重新添加列表
          for(int i=0;i<z;i++)
          {
              Class a;
              a.read(fin);   
              lista.push_back(a);
          }
      }
          fin.close();
    

    }
    //显示所有文件信息
    void display()
    {

      cout<<"班级信息为:"<<endl;
      readfile();
      for(int i=0;i<lista.size();i++)
      {
          {
              cout<<"名称:"<<lista[i].classname<<endl;
              cout<<"编号:"<<lista[i].classnumber<<endl;
          }
          cout<<endl;
      }
    

    }

  • 是部分完整代码,部分不完整。应该后面两个板块不完整。

  • 如何完成代码修改,使得班级类和通讯录信息类存在关系并且最后将通讯录信息保存入文件中有。使用类的组合。

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。