c++面向对象程序设计 谭浩强 第五章答案

本文通过多个C++代码示例详细解析了类的定义、构造函数、成员函数、派生类、多重继承等概念,展示了如何在派生类中访问基类成员,并介绍了成员函数重写与虚函数的使用。

1:

#include <iostream>

using namespace std;

class Student

{public:

  void get_value()

   {cin>>num>>name>>sex;}

  void display( )

    {cout<<"num: "<<num<<endl;

     cout<<"name: "<<name<<endl;

     cout<<"sex: "<<sex<<endl;}

 private :

   int num;

   char name[10];

   char sex;

};   

 

class Student1: public Student

 {public:

   void get_value_1()

    {get_value();

     cin>>age>>addr;}

   void display_1()

   {   cout<<"age: "<<age<<endl;          //引用派生类的私有成员,正确。

       cout<<"address: "<<addr<<endl;}    //引用派生类的私有成员,正确。

  private:

       int age;

       char addr[30];

 };

 

int  main()

{Student1 stud1;

  stud1.get_value_1();

  stud1.display();

  stud1.display_1();

  return 0;

}

2:

#include <iostream>

using namespace std;

class Student

{public:

  void get_value()

   {cin>>num>>name>>sex;}

  void display( )

    {cout<<"num: "<<num<<endl;

     cout<<"name: "<<name<<endl;

     cout<<"sex: "<<sex<<endl;}

 private :

   int num;

   char name[10];

   char sex;

};   

 

class Student1: private Student

 {public:

   void get_value_1()

    {get_value();

     cin>>age>>addr;}

   void display_1()

       {display();

       cout<<"age: "<<age<<endl;        //引用派生类的私有成员,正确。

       cout<<"address: "<<addr<<endl;}    //引用派生类的私有成员,正确。

  private:

       int age;

    char addr[30];

 };

 

int main()

 {Student1 stud1;

  stud1.get_value_1();

  stud1.display_1();

  return 0;

}

3:

#include <iostream>

using namespace std;

class Student                        //声明基类

{public:                             //基类公用成员

  void get_value();

  void display( );

 protected :                         //基类保护成员

    int num;

    char name[10];

    char sex;

};

 

void Student::get_value()

 {cin>>num>>name>>sex;}

 

void Student::display( )

 {cout<<"num: "<<num<<endl;

  cout<<"name: "<<name<<endl;

  cout<<"sex: "<<sex<<endl;

 }

 

class Student1: protected Student              //声明一个保护派生类

{public:

   void get_value_1();

   void display1( );

private:

   int age;                          

   char addr[30];

};

 

void Student1::get_value_1()

 {get_value();

  cin>>age>>addr;

 }

void Student1::display1( )

  {cout<<"num: "<<num<<endl;         //引用基类的保护成员

   cout<<"name: "<<name<<endl;       //引用基类的保护成员

   cout<<"sex: "<<sex<<endl;         //引用基类的保护成员

   cout<<"age: "<<age<<endl;         //引用派生类的私有成员

   cout<<"address: "<<addr<<endl;    //引用派生类的私有成员

  }

 

int main( )

 {Student1 stud1;                      //stud1是派生类student1类的对象

  stud1.get_value_1();                 //调用派生类对象stud1的公用成员函数

  stud1.display1( );                   //调用派生类对象stud1的公用成员函数

  return 0;

 }

4: 解法一

#include <iostream>

using namespace std;

class Student//声明基类

{public:                             //基类公用成员

  void get_value();

  void display( );

 protected :                         //基类保护成员

    int num;

    char name[10];

    char sex;

};

 

void Student::get_value()

 {cin>>num>>name>>sex;}

 

void Student::display( )

 {cout<<"num: "<<num<<endl;

  cout<<"name: "<<name<<endl;

  cout<<"sex: "<<sex<<endl;

 }

 

class Student1: public Student              //声明一个公用派生类

{public:

   void get_value_1();

   void display1( );

 private:

   int age;                          

   char addr[30];

};

 

void Student1::get_value_1()

 {get_value();

  cin>>age>>addr;

 }

void Student1::display1( )

  {cout<<"num: "<<num<<endl;     //引用基类的保护成员,合法

   cout<<"name: "<<name<<endl;       //引用基类的保护成员,合法

   cout<<"sex: "<<sex<<endl;         //引用基类的保护成员,合法

   cout<<"age: "<<age<<endl;         //引用派生类的私有成员,合法

   cout<<"address: "<<addr<<endl;    //引用派生类的私有成员,合法

  }

 

int main( )

 {Student1 stud1;                      //stud1是派生类student1类的对象

  stud1.get_value_1();                 //调用派生类对象stud1的公用成员函数get_value_1

  stud1.display1( );                   //调用派生类对象stud1的公用成员函数display1

  return 0;

 }

解法二

#include <iostream>

using namespace std;

class Student                        //声明基类

{public:                             //基类公用成员

  void get_value();

  void display( );

 protected :                         //基类保护成员

    int num;

    char name[10];

    char sex;

};

  

void Student::get_value()

 {cin>>num>>name>>sex;}

 

void Student::display( )

 {cout<<"num: "<<num<<endl;

  cout<<"name:"<<name<<endl;

  cout<<"sex:"<<sex<<endl;

 }

 

class Student1: protected Student              //声明一个公用派生类

{public:

   void get_value_1();

   void display1( );

 private:

   int age;                          

   char addr[30];

};

 

void Student1::get_value_1()

 {cin>>age>>addr;}

 

void Student1::display1( )

  {cout<<"age:"<<age<<endl;

   cout<<"address:"<<addr<<endl;

  }

 

int main( )

 {Student1 stud1;                      //stud1是派生类student1类的对象

  stud1.get_value();

stud1.get_value_1();

  stud1.display( );

  stud1.display1();                  //合法。display1是派生类中的公用成员函数

  return 0;

 }

5:

class A                   //A为基类

{public:

  void f1( );

  int i;

 protected:

  void f2();

  int j;

 private:

  int k;

};

 

class B: public A            //B为A的公用派生类

{public:

  void f3( );

 protected:

  int m;

 private:

  int n;

};

 

class C: public B              //C为B的公用派生类

{public:

  void f4();

 private:

  int p;

};

 

int main()

{A a1;                         //a1是基类A的对象

 B b1;                         //b1是派生类B的对象

 C//c1是派生类C的对象

 return 0;

}

6:

#include <iostream>

using namespace std;

class A

{public:

  void f1( );

 protected:

  void f2();

 private:

  int i;

};

 

class B: public A

{public:

  void f3( );

  int k;

 private:

  int m;

};

 

class C: protected B

{public:

  void f4();

 protected:

  int n;

 private:

  int p;

};

 

class D: private C

{public:

  void f5();

 protected:

  int q;

 private:

  int r;

};

 

int main()

{A a1;

 B b1;

     C c1;

 D d1;

 return 0;

}

7:

#include <iostream>

using namespace std;

class A

 {

  public:

   A(){a=0;b=0;}

   A(int i){a=i;b=0;}

   A(int i,int j){a=i;b=j;}

   void display(){cout<<"a="<<a<<" b="<<b;}

  private:

   int a;

   int b;

 };

 

class B  : public A

 {

  public:

   B(){c=0;}

   B(int i):A(i){c=0;}

   B(int i,int j):A(i,j){c=0;}

   B(int i,int j,int k):A(i,j){c=k;}

   void display1()

    {display();

     cout<<" c="<<c<<endl;

    }

   private:

    int c;

};

 

int main()

{   B b1;

    B b2(1);

    B b3(1,3);

    B b4(1,3,5);

    b1.display1();

         b2.display1();

    b3.display1();

    b4.display1();

return 0;

}

8:

#include <iostream>

using namespace std;

class A

 {

  public:

   A(){cout<<"constructing A "<<endl;}

   ~A(){cout<<"destructing A "<<endl;}

 };

 

class B  : public A

 {

  public:

   B(){cout<<"constructing B "<<endl;}

   ~B(){cout<<"destructing B "<<endl;}

};

 

class C  : public B

 {

  public:

   C(){cout<<"constructing C "<<endl;}

   ~C(){cout<<"destructing C "<<endl;}

};

int main()

{ C c1;

  return 0;

}

           9:

#include<string>

#include <iostream>

using namespace std;

class Teacher

 {public:

   Teacher(string nam,int a,char s,string tit,string ad,string t);

   void display();

  protected:

    string name;

    int age;

    char sex;

    string title;

    string addr;

    string tel;

};

 

Teacher::Teacher(string nam,int a,char s,string tit,string ad,string t):

     name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){ }

void Teacher::display()

     {cout<<"name:"<<name<<endl;

      cout<<"age"<<age<<endl;

      cout<<"sex:"<<sex<<endl;

      cout<<"title:"<<title<<endl;

      cout<<"address:"<<addr<<endl;

      cout<<"tel:"<<tel<<endl;

      }

 

class Cadre

 {public:

Cadre(string nam,int a,char s,string p,string ad,string t);

   void display();

  protected:

   string name;

   int age;

   char sex;

   string post;

   string addr;

   string tel;

 };

 

Cadre::Cadre(string nam,int a,char s,string p,string ad,string t):

     name(nam),age(a),sex(s),post(p),addr(ad),tel(t){}

 

void Cadre::display()

    {cout<<"name:"<<name<<endl;

     cout<<"age:"<<age<<endl;

     cout<<"sex:"<<sex<<endl;

     cout<<"post:"<<post<<endl;

     cout<<"address:"<<addr<<endl;

     cout<<"tel:"<<tel<<endl;

    }

 

class Teacher_Cadre:public Teacher,public Cadre

 {public:

   Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w);

   void show( );

  private:

    float wage;

 };

 

Teacher_Cadre::Teacher_Cadre(string nam,int a,char s,string t,string p,string ad,string tel,float w):

  Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w) {}

void Teacher_Cadre::show( )

    {Teacher::display();

     cout<<"post:"<<Cadre::post<<endl;

     cout<<"wages:"<<wage<<endl;

     }

 

int main( )

 {Teacher_Cadre te_ca("Wang-li",50,'f',"prof.","president","135 Beijing Road,Shanghai","(021)61234567",1534.5);

  te_ca.show( );

  return 0;

}

10:

#include <iostream>

#include <cstring>

using namespace std;

class Teacher                                //教师类

 {public:

  Teacher(int,char [],char);               //声明构造函数

    void display();                          //声明输出函数

  private:

   int num;

   char name[20];

   char sex;

  };

 

Teacher::Teacher(int n,char nam[],char s)    //定义构造函数

 {num=n;

  strcpy(name,nam);

  sex=s;

}

 

void Teacher::display()                      //定义输出函数

 {cout<<"num:"<<num<<endl;

  cout<<"name:"<<name<<endl;

  cout<<"sex:"<<sex<<endl;

}

 

class BirthDate                               //生日类

 {public:

    BirthDate(int,int,int);                   //声明构造函数

    void display();                           //声明输出函数

    void change(int,int,int);                 //声明修改函数

  private:

    int year;

    int month;

    int day;

};

 

BirthDate::BirthDate(int y,int m,int d)       //定义构造函数

 {year=y;

  month=m;

  day=d;

 }

 

void BirthDate::display()                     //定义输出函数

 {cout<<"birthday:"<<month<<"/"<<day<<"/"<<year<<endl;}

 

void BirthDate::change(int y,int m,int d)     //定义修改函数

 {year=y;

  month=m;

  day=d;

 }

 

class Professor:public Teacher                         //教授类

 {public:

    Professor(int,char [],char,int,int,int,float);    //声明构造函数

    void display();                                   //声明输出函数

    void change(int,int,int);                         //声明修改函数

   private:

    float area;

    BirthDate birthday;                               //定义BirthDate类的对象作为数据成员

 };

 

Professor::Professor(int n,char nam[20],char s,int y,int m,int d,float a):

 Teacher(n,nam,s),birthday(y,m,d),area(a){ }          //定义构造函数

 

void Professor::display()                             //定义输出函数

{Teacher::display();

 birthday.display();

 cout<<"area:"<<area<<endl;

}

 

void Professor::change(int y,int m,int d)             //定义修改函数

 {birthday.change(y,m,d);

 }

 

int main()

{Professor prof1(3012,"Zhang",'f',1949,10,1,125.4);   //定义Professor对象prof1

 cout<<endl<<"original data:"<<endl;

 prof1.display();                                     //调用prof1对象的display函数

 cout<<endl<<"new data:"<<endl;

 prof1.change(1950,6,1);                              //调用prof1对象的change函数

 prof1.display();                                     //调用prof1对象的display函数

 return 0;

}

转载于:https://www.cnblogs.com/suibian1/p/10987322.html

### 回答1: 《C面向对象程序设计第三答案》是由谭浩强编写的一本与C语言相关的教材辅导答案。C面向对象程序设计是计算机科学中的一门重要课程,谭浩强作为资深教授和编程专家,他撰写的书籍在编程领域拥有很高的权威性。 这本教材答案为学习者提供了对应教材《C面向对象程序设计第三》的习题答案和思考指导。习题是帮助学生巩固所学知识和提升编程能力的重要方式,通过对答案的学习,学生可以更好地理解并运用相关知识。学习者可以通过对比答案,分析解题思路、吸收优秀的编程风格和技巧,从而提高编程水平。 《C面向对象程序设计第三答案》按照教材的章节顺序,详细解答了各个章节的习题,包括程序设计题、思考题、应用题等,涵盖了从基础的语法使用到复杂的程序设计技巧,旨在帮助学生全面理解并掌握C语言的面向对象编程思想和方法。 除了提供答案,这本教材还包括了一些习题的思考指导,指导学生如何分析问题、拆解问题、确定解决步骤等。这些思考指导帮助学生培养编程思维和解决问题的能力,使他们能够独立思考和解决实际编程任务。 总之,《C面向对象程序设计第三答案》是一本为学习C语言面向对象程序设计的学生提供的辅助资料,它不仅提供了习题答案,还包括了思考指导,帮助学生提高编程水平和解决实际问题的能力。 ### 回答2: 《C++面向对象程序设计(第3)》是计算机科学与技术专业学生的主要教材之一,由谭浩强编写。这本书全面介绍了C++编程语言的面向对象编程思想和相关的概念、原则与技巧。 该教材内容分为15章,首先从C++的基本概念和语法入手,然后逐渐介绍了面向对象编程的思想和实现。每章的结尾都提供了习题和答案,帮助学生巩固所学知识。 《C++面向对象程序设计(第3)》的答案谭浩强根据书中习题所提供的参考答案。这些答案精确明确,清晰易懂,配有详细的解释和示范代码。通过阅读和理解这些答案,学生可以加深对所学知识的理解,提高自己的编程技能。 同时,这本书还提供了大量的示例代码和实践案例,帮助学生将理论知识应用于实际的编程项目中。通过实践,学生可以更好地理解面向对象编程的思想和方法,并培养自己的分析和解决问题的能力。 总之,《C++面向对象程序设计(第3)》是一本权威性、系统性和实用性并存的教材。通过学习这本书,学生可以全面掌握C++编程语言和面向对象编程的相关知识,提高自己的编程能力,并为将来的实际工作打下坚实的基础。 ### 回答3: 《C++面向对象程序设计》(第三)是谭浩强所著的一本教材,该教材主要介绍了C++面向对象程序设计的基本概念、语法和技巧。全书共分为10个章节,涵盖了面向对象程序设计的各个方面。 第一章介绍了C++的发展历程以及面向对象程序设计的基本概念和特点。第二章详细讲解了C++的基本语法和常用数据类型。第三章重点介绍了C++中的类和对象的概念,并通过具体的示例演示了如何定义和使用类。 第四章讲解了C++的继承和派生,介绍了单继承和多继承的概念以及如何定义和使用派生类。第五章介绍了C++中的多态性,包括静态多态和动态多态的概念以及如何使用虚函数实现动态绑定。 第六章讲解了C++中的运算符重载和类型转换,通过实例说明了如何重载运算符和类型转换函数。第七章介绍了C++中的异常处理机制,讲解了异常的概念和处理方法。 第八章讲解了C++中的文件操作,包括输入输出流、文件读写以及文件指针的相关知识。第九章介绍了C++的模板和泛型编程,包括函数模板和类模板的定义和使用。 第十章介绍了C++中的标准模板库(STL),包括容器、迭代器、算法和函数对象等的使用方法。 《C++面向对象程序设计》(第三)通过简明扼要的语言和生动具体的示例,全面而深入地介绍了C++面向对象程序设计的基本概念和技巧,适合初学者学习和参考。同时,该教材也提供了丰富的练习题和案例,供读者巩固和应用所学知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值