鱼C论坛

 找回密码
 立即注册
查看: 2719|回复: 0

[技术交流] C++(14th for three):覆盖与重载

[复制链接]
发表于 2021-2-18 20:09:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
覆盖

我们知道,当子类采用继承过来的基类的方法的时候,该方法对于所有子类都是一样的,可是,对于同一种方法,它存在于每一个子类,但又有所不同,该怎么办,这时候就利用到了覆盖
覆盖方法:在子类内再声明,再重新写实现方式(也就是cv大法再改改就ok了)
  1. #include <iostream>
  2. #include<string>

  3. class Computer
  4. {
  5. public:
  6.         void print_num();
  7. };

  8. class Ipad: public Computer
  9. {
  10. public:
  11.         void print_num();
  12. };

  13. void Computer::print_num()
  14. {
  15.         std::cout << "1" << std::endl;
  16. }

  17. void Ipad::print_num()
  18. {
  19.         std::cout << "2" << std::endl;
  20. }

  21. int main()
  22. {
  23.         Ipad myipad;
  24.         myipad.print_num();
  25.         
  26.         return 0;
  27. }
复制代码

最后输出的结果是 2 ,而不是1,覆盖使得子类方法的实现方式不同于基类,从而使得不同子类在同一类方法内有不同的实现方式;
重载

重载就是对同名方法,但有对有不同的传入参数有不同的实现方式;
重载方法:在同名方法下再定义一个有参数的,再写实现(cv大法再加点参数再改改实现)
  1. #include <iostream>
  2. #include<string>

  3. class Computer
  4. {
  5. public:
  6.     void print_num();
  7.     void print_num(int num);
  8. };

  9. class Ipad: public Computer
  10. {
  11. public:
  12. };

  13. void Computer::print_num()
  14. {
  15.     std::cout << "1" << std::endl;
  16. }
  17. void Computer::print_num(int num)
  18. {
  19.         std::cout << num << std::endl;
  20. }

  21. int main()
  22. {
  23.         Ipad myipad;
  24.     myipad.print_num();
  25.     myipad.print_num(15);
  26.         
  27.     return 0;
  28. }
复制代码
  1. 1
  2. 15
复制代码

相信你很容易理解

混合的错误

  1. #include <iostream>
  2. #include<string>

  3. class Computer
  4. {
  5. public:
  6.         void print_num();
  7.         void print_num(int num);
  8. };

  9. class Ipad: public Computer
  10. {
  11. public:
  12.         void print_num();
  13.        
  14. };

  15. void Computer::print_num()
  16. {
  17.         std::cout << "1" << std::endl;
  18. }
  19. void Computer::print_num(int num)
  20. {
  21.         std::cout << num << std::endl;
  22. }

  23. void Ipad::print_num()
  24. {
  25.         std::cout << "2" << std::endl;
  26. }

  27. int main()
  28. {
  29.         Ipad myipad;
  30.         myipad.print_num();
  31.         myipad.print_num(15);
  32.         
  33.     return 0;
  34. }
复制代码

编译后会报错,因为使用了覆盖之后,就无法使用到基类的重载方法,解决方法:在子类再声明,然后再次写实现。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-1 18:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表