• 变量承接函数类型的方法


    重点:

    1.当两个类没有共同基类。

    采用函数模板:类具有相同的函数

    1. class FirstCmd
    2. {
    3. public:
    4. FirstCmd()=default;
    5. ~FirstCmd() = default;
    6. void TestCmd() { std::cout << 10 << std::endl;};
    7. };
    8. class SecondCmd
    9. {
    10. public:
    11. SecondCmd() = default;
    12. ~SecondCmd() = default;
    13. void TestCmd() { std::cout << 20 << std::endl; };
    14. };
    15. template<class T>
    16. void Get(T* a)
    17. {
    18. a->TestCmd();
    19. }
    20. int main()
    21. {
    22. int a = 3;
    23. int b = a * a * a-a;
    24. FirstCmd* first=new FirstCmd();
    25. SecondCmd* second =new SecondCmd();
    26. auto iter = dynamic_cast(first);
    27. auto se = dynamic_cast(second);
    28. if (iter == nullptr)
    29. {
    30. Get(se);
    31. }
    32. else
    33. {
    34. Get(iter);
    35. }
    36. return 0;
    37. }

    2.当两个类有共同基类。

     采用向下转型方式

    1. class BaseCmd
    2. {
    3. public:
    4. BaseCmd() = default;
    5. ~BaseCmd() = default;
    6. virtual void TestCmd() = 0;
    7. };
    8. class FirstCmd:public BaseCmd
    9. {
    10. public:
    11. FirstCmd()=default;
    12. ~FirstCmd() = default;
    13. virtual void TestCmd() { std::cout << 10 << std::endl;};
    14. };
    15. class SecondCmd :public BaseCmd
    16. {
    17. public:
    18. SecondCmd() = default;
    19. ~SecondCmd() = default;
    20. virtual void TestCmd() { std::cout << 20 << std::endl; };
    21. };
    22. std::shared_ptr GetBaseCmd(bool check)
    23. {
    24. if (check)
    25. {
    26. return std::make_shared();
    27. }
    28. else
    29. {
    30. return std::make_shared();
    31. }
    32. }
    33. int main()
    34. {
    35. bool check{ false };
    36. auto base =GetBaseCmd(check);
    37. base->TestCmd();
    38. std::shared_ptr baseCmd = std::dynamic_pointer_cast(base);
    39. if (!baseCmd)
    40. {
    41. baseCmd= std::dynamic_pointer_cast(base);
    42. }
    43. if (baseCmd)
    44. {
    45. baseCmd->TestCmd();
    46. }
    47. return 0;
    48. }

  • 相关阅读:
    系统性考量【复盘】这件事儿
    EasyXnote5关于批量绘图
    hdlbits系列verilog解答(always块条件语句)-37
    涉及区间的查询
    突破编程_C++_面试(函数(1))
    《go程序语言设计》引言
    vue.js事件处理器
    Git相关知识(1)
    GO语言篇之反射
    Node.js开发-fs模块
  • 原文地址:https://blog.csdn.net/qq_38409301/article/details/133742873