bear七 2022-05-09 15:31 采纳率: 83.3%
浏览 86
已结题

c++代码问题继承与派生

  1. #include<iostream>
  2. using namespace std;
  3. class Animal{
  4. protected:
  5. unsigned int Age;double Weight;string Name;
  6. public:
  7. Animal(unsigned int age,double weight,string name)
  8. {
  9. Age=age;
  10. Weight=weight;
  11. Name=name;
  12. }
  13. virtual void Animal()
  14. {
  15. cout << "Animal Constructor" << endl;
  16. }
  17. };
  18. class Fish:virtual public Animal{
  19. protected:
  20. bool Fim;
  21. public:
  22. Fish(unsigned int age,double weight,string name,bool Fim):Animal(age,weight,name)
  23. {
  24. this->Fim=Fim;
  25. }
  26. virtual void Fish()
  27. {
  28. cout << "Fish Constructor" << endl;
  29. }
  30. };
  31. class TerrestrialAnimal:virtual public Animal{
  32. protected:
  33. unsigned int Legs;
  34. public:
  35. TerrestrialAnimal(unsigned int age,double weight,string name,unsigned Leg):Animal(age,weight,name)
  36. {
  37. Legs=Leg;
  38. }
  39. virtual void TerrestrialAnimal()
  40. {
  41. cout << "TerrestrialAnimal Constructor" << endl;
  42. }
  43. };
  44. class Reptile:public Fish,public TerrestrialAnimal{
  45. public:
  46. Reptile(unsigned int age,double weight,string name,unsigned int Leg,bool Fim):Animal(age,weight,name),Fish(age,weight,name,Fim),TerrestrialAnimal(age,weight,name,Leg)
  47. {}
  48. virtual void Reptile()
  49. {
  50. cout << "Reptile Constructor" << endl;
  51. }
  52. void Reptile::Print()
  53. {
  54. cout << "Reptile Age:" << Age << endl;
  55. }
  56. };
  57. int main(){
  58. int age;
  59. int weight;
  60. string name;
  61. int fim_num;
  62. int leg_num;
  63. cin >> age >> weight >> name >> fim_num >> leg_num;
  64. Reptile r1(age, weight, name, fim_num, leg_num);
  65. r1.Print();
  66. return 0;
  67. }

代码出错了,请问一下怎么改
原本的代码要求如下
定义一个动物 (Animal) 基类,具有 Age、Weight、name 等数据成员,由 Animal 类公有派生出鱼 (Fish) 类、陆地动物 (TerrestrialAnimal) 类。 Fish 类有鳍 (Fim) 属性, TerrestrialAnimal 类有腿 (Leg) 属性。从 Fish 和 TerrestrialAnimal 公有派生出爬行动 物 (Reptile) 类。

在继承过程中,把 Animal 设置为虚基类。
Animal类的构造函数中输出信息:cout << "Animal Constructor" << endl;
Fish类的构造函数中输出信息:cout << "Fish Constructor" << endl;
TerrestrialAnimal类的构造函数中输出信息:cout << "TerrestrialAnimal Constructor" << endl;
Reptile类的构造函数中输出信息:cout << "Reptile Constructor" << endl;
Reptile类包含如下成员函数:
void Reptile::Print(){
cout << "Reptile Age:" << Age << endl;
}

展开全部

  • 写回答

1条回答 默认 最新

  • SmallAntJ 2022-05-09 16:31
    关注

    类的构造函数不能是虚函数,而且没有返回值。你写了两种构造函数,带参数的构造和默认构造。默认构造函数要写成:

    1. Animal()
    2. {
    3. cout << "Animal Constructor" << endl;
    4. }

    然后,题目要求构造函数要有输出,所以带参数的构造函数应该也需要输出:

    1. Animal(unsigned int age,double weight,string name)
    2. {
    3. Age=age;
    4. Weight=weight;
    5. Name=name;
    6. cout << "Animal Constructor" << endl;
    7. }

    按这样把所有类都改一下。
    还有就是52行,在类里实现成员函数的时候不需要 :: 操作符,在类中声明类外实现才需要加,可以直接写成

    1. void Print()
    2. {
    3. cout << "Reptile Age:" << Age << endl;
    4. }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月10日
  • 已采纳回答 5月9日
  • 创建了问题 5月9日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部