Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2552651
  • 博文数量: 315
  • 博客积分: 3901
  • 博客等级: 少校
  • 技术积分: 3640
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-08 15:32
个人简介

知乎:https://www.zhihu.com/people/monkey.d.luffy Android高级开发交流群2: 752871516

文章分类

全部博文(315)

文章存档

2019年(2)

2018年(1)

2016年(7)

2015年(32)

2014年(39)

2013年(109)

2012年(81)

2011年(44)

分类: C/C++

2013-05-18 19:43:51

    管哥视频开始了。一个我比较喜欢的视频,虽然我们都是普通的程序员,但是我们彼此都努力着,为了梦想、为了生活。
    这课比较轻松,不错开始视频学习之前,还是要有点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 ? " << ((1 == maxT(2, 3)) ? "true" : "false");

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


阅读(2231) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~