当前位置:   article > 正文

2024-3-18-C++day6作业

2024-3-18-C++day6作业

1>思维导图

b58af2c8998243e1a9ada8f493561479.png

903795917c134cdbb12e1dd4759da70f.png

2>试编程

要求:

封装一个动物的基类,类中有私有成员:姓名,颜色,指针成员年纪

再封装一个狗这样类,共有继承于动物类,自己拓展的私有成员有:指针成员:腿的个数(整型 int count),共有成员函数:会叫:void speak()

要求:分别完成基类和派生类中的:构造函数、析构函数、拷贝构造函数、拷贝赋值函数

eg : Dog d1;

Dog d2(.....);

Dog d3(d2);

d1 = d3;

源代码:

  1. #include <iostream>
  2. using namespace std;
  3. //封装一个动物的基类
  4. class Animal
  5. {
  6. //类中有私有成员:姓名,颜色,指针成员年纪
  7. private:
  8. string name;
  9. string color;
  10. double *age;
  11. public:
  12. //Animal无参拷贝
  13. Animal(){}
  14. //Animal有参拷贝
  15. Animal(string n,string c,double a):name(n), color(c),\
  16. age(new double(a))
  17. {}
  18. //Animal析构函数
  19. ~Animal()
  20. {
  21. delete age;
  22. }
  23. //Animal拷贝构造
  24. Animal (const Animal &other):name(other.name),\
  25. color(other.color), age(new double(*other.age))
  26. {}
  27. //Animal拷贝赋值
  28. Animal &operator=(const Animal &other)
  29. {
  30. if(this != &other)
  31. {
  32. name = other.name;
  33. color = other.color;
  34. age = new double(*other.age);
  35. }
  36. return *this;
  37. }
  38. };
  39. //封装一个狗这样类,公有继承于动物类
  40. class Dog:public Animal
  41. {
  42. //自己拓展的私有成员有:指针成员:腿的个数(整型 int legNum)
  43. private:
  44. int *legNum;
  45. public:
  46. //Dog无参拷贝
  47. Dog(){}
  48. //Dog有参拷贝
  49. Dog(int ln,string n,string c,double a):Animal(n,c,a),\
  50. legNum(new int(ln))
  51. {}
  52. //Dog析构函数
  53. ~Dog()
  54. {
  55. delete legNum;
  56. }
  57. //Dog拷贝构造
  58. Dog (const Dog &other):Animal(other),\
  59. legNum(new int(*other.legNum))
  60. {}
  61. //Dog拷贝赋值
  62. Dog &operator=(const Dog &other)
  63. {
  64. if(this != &other)
  65. {
  66. legNum = new int(*other.legNum);
  67. Animal::operator=(other);
  68. }
  69. return *this;
  70. }
  71. //公有成员函数:会叫:void speak()
  72. void speak()
  73. {
  74. cout << this << ": 汪汪汪……" << endl;
  75. }
  76. };
  77. int main()
  78. {
  79. Dog d1;
  80. Dog d2(4,"小汪","blue",2.5);
  81. Dog d3(d2);
  82. d1 = d3;
  83. // d1.speak();
  84. // d2.speak();
  85. // d3.speak();
  86. return 0;
  87. }

3>试编程

要求:

以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:
比喻:动物园的讲解员和动物表演想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员,他会为每种动物表演做简单的介绍。
在这个场景中,我们可以将动物比作是不同的类,而每种动物表演则是类中的函数。
而讲解员则是一个基类,他可以根据每种动物的特点和表演,进行相应的介绍。
具体过程如下:
定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为。

源代码:

  1. #include <iostream>
  2. using namespace std;
  3. //定义一个基类Animal
  4. class Animal
  5. {
  6. public:
  7. virtual void perform() = 0;
  8. };
  9. //定义一个Animal的子类Lion派生类
  10. class Lion:virtual public Animal
  11. {
  12. private:
  13. string introduction;
  14. public:
  15. Lion(string introduction=""):introduction(introduction){}
  16. //重写 perform()虚函数
  17. void perform() override
  18. {
  19. cout << " 介绍:芝士狮子" << introduction <<endl;
  20. cout << " 表演:狮子拜天!" << endl;
  21. }
  22. };
  23. //定义一个Animal的子类SnowLeopard派生类
  24. class SnowLeopard:virtual public Animal
  25. {
  26. private:
  27. string introduction;
  28. public:
  29. SnowLeopard(string introduction=""):introduction(introduction){}
  30. //重写 perform()虚函数
  31. void perform() override
  32. {
  33. cout << " 介绍:芝士雪豹" << introduction <<endl;
  34. cout << " 表演:与丁真珍珠去粘合国演讲。" << endl;
  35. }
  36. };
  37. //定义一个Animal的子类Elephant派生类
  38. class Elephant:virtual public Animal
  39. {
  40. private:
  41. string introduction;
  42. public:
  43. Elephant(string introduction=""):introduction(introduction){}
  44. //重写 perform()虚函数
  45. void perform() override
  46. {
  47. cout << " 介绍:芝士大象" << introduction <<endl;
  48. cout << " 表演:大象踢腿!" << endl;
  49. }
  50. };
  51. int main()
  52. {
  53. // 实例化不同的动物类
  54. Lion lion;
  55. Elephant elephant;
  56. SnowLeopard SnowLeopard;
  57. // 使用基类指针指向不同的动物对象,实现多态
  58. Animal* animal1 = &lion;
  59. Animal* animal2 = &elephant;
  60. Animal* animal3 = &SnowLeopard;
  61. // 讲解员为每种动物表演做介绍
  62. cout << "动物园讲解员开始介绍:" << endl;
  63. cout << "------------------------" << endl;
  64. cout << "狮子表演:" << endl;
  65. animal1->perform();
  66. cout << "------------------------" << endl;
  67. cout << "雪豹表演:" << endl;
  68. animal3->perform();
  69. cout << "------------------------" << endl;
  70. cout << "大象表演:" << endl;
  71. animal2->perform();
  72. cout << "------------------------" << endl;
  73. return 0;
  74. }

效果图:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/267927
推荐阅读
相关标签
  

闽ICP备14008679号