函数模版

来源:互联网 发布:mac 链接阿里云服务器 编辑:程序博客网 时间:2024/05/01 11:38
一个我比较喜欢的视频,虽然我们都是普通的程序员,但是我们彼此都努力着,为了梦想、为了生活。
    这课比较轻松,不错开始视频学习之前,还是要有点c++基础的,不然....你懂的。因为课程都是围绕c++模的,当然c++基本的东西相信大家都能自己学明白的。我也是学c++算是比较长时间了,不过还有很多东西感觉不行。而且一直开发都是c,c++没怎么运用,但是不希望遗忘这么牛的语言,呵呵。加油...
    步入正题:
    课程主要三点<1> 动多态 <2> 静多态 <3> 函数模
    <动多态> 个人理解:动多态就是在运行时进行类的实例化(包括参数,返回值等),也就是所谓的延迟绑定技术,绑定发生在运行期间;
                   实现方式:继承、虚函数、指针;其中虚函数用的比较多;
                    代码练习:

点击(此处)折叠或打开

  1. #include <iostream>

  2. using namespace std;

  3. /************************************************************************/
  4. /*                动多态                                                    */
  5. /************************************************************************/

  6. class PICTURE
  7. {
  8. public:
  9.     virtual void draw() = 0;
  10. };

  11. class PNG : public PICTURE
  12. {
  13. public:
  14.     virtual void draw()
  15.     {
  16.         cout << "draw png\n";
  17.     }
  18. };

  19. class JPG : public PICTURE
  20. {
  21. public:
  22.     virtual void draw()
  23.     {
  24.         cout << "draw jpg\n";
  25.     }
  26. };

  27. static void drawImage(PICTURE * pic)
  28. {
  29.     pic->draw();
  30. }

  31. int main(int argc, char * argv[])
  32. {
  33.     ///< 动多态
  34.     PNG * pg = new PNG;
  35.     JPG * jg = new JPG;

  36.     drawImage(pg);
  37.     drawImage(jg);
  38.     
  39.     delete pg;
  40.     delete jg;

  41.     return 0;
  42. }
        <静多态> 个人理解:多态就是在编译期间进行类的实例化(包括参数,返回值等),也就是所谓的静态绑定static-binding,绑定发生在编译期间
                   实现方式:重载、模;
                    代码练习:

点击(此处)折叠或打开

  1. #include <iostream>

  2. using namespace std;

  3. /************************************************************************/
  4. /*                    静多态、 */
  5. /************************************************************************/
  6. class GIF
  7. {
  8. public:
  9.     static void draw()
  10.     {
  11.         cout << "draw gifn";
  12.     }
  13. };

  14. template<typename IMAGE>
  15. void drawPicture()
  16. {
  17.     IMAGE::draw();
  18. }

  19. int main(int argc, char * argv[])
  20. {

  21.     ///< 静多态 格式理解:对drawPicture()函数指定模版参数GIF
  22.     drawPicture<GIF>();

  23.     return 0;
  24. }
    <函数模> 个人理解:函数的参数在编译期间进行实例化,可以指定多个参数,可以实现一个接口,多种数据类型使用的功效,类模与函数模版类似,后面课程管哥会重点说类模版;
                   实现方式:模版;
                    代码练习:

点击(此处)折叠或打开

  1. #include <iostream>

  2. using namespace std;

  3. /************************************************************************/
  4. /*                    函数模版 */
  5. /************************************************************************/
  6. template <typename T>
  7.  bool maxT(T a1, T a2)
  8. {
  9.     return a1 > a2;
  10. }

  11. int main(int argc, char * argv[])
  12. {
  13.     ///< 函数模版简单测试 模版在编译期间实例化【让编译器成为我们的奴隶】
  14.     cout << "2 > 3 ? " << ((== maxT(2, 3)) ? "true" : "false");

  15.     return 0;
  16. }
    第一课比较轻松,我记住了一句话:“让编译器成为我们的奴隶”.....但是...代码质量确实要不断提高,有时候不能完全相信编译器,尤其是linux下的Qt,我是被坑了n多次了(最牛的一次就是竟然调用了一个其它头文件的接口,而且我还没有引用该头文件,同时运行还没出错,在android上跑也ok,太牛了!!!)。
原创粉丝点击