随笔_20201005

每个优秀的人,都有一段沉默的时光。那段时光,是付出了很多努力却得不到结果的日子,我们把它叫做扎根 – Chairman Xi

最近读到这段话,触动颇深。倒不是回想到了自己的某段艰苦的扎根时光,而是觉得当前的日子显得太过于安逸,根不深则身不固,是否应该做些更有挑战性的事情呢?

more ...

设计模式_课程

1 设计模式简介

  • 从面向对象谈起:
    • 底层思维:向下,如何把握机器底层,从微观理解对象构造

      语言构造
      编译转换
      内存模型
      运行时机制

    • 抽象思维:向上,如何将我们的周围世界抽象为程序代码

      面向对象
      组件封装
      设计模式
      架构模式

  • 如何解决复杂性?
    • 分解。(即分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单问题
    • 抽象。(由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型
more ...

C++_新特性

01 nullptrconstexptr

链接_视频

  • nullptr表示空指针,本质还是0,但具备了类型。
  • 建议程序中使用nullptr代替NULL
  • constexptr常量表示式关键字,用于修饰函数。

02 迭代器与类型推导auto

链接_视频

  • stl中存在一些常用的封装好的数据结构相关的模板类(容器),例如vector(动态数据)list(链表)stack(栈)queue(队列)map(hash表/红黑树)等。
  • 这些类通常都具有一些最基本的操作,例如增加,删除,修改,遍历等。
  • C++为了方便统一,采用了设计模式中的迭代器模式,统一的提供了一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
    1
    2
    3
    4
    5
    std::vector<int> v;
    std::vector<int>::iterator it; // 迭代器,模板类中的内部类
    for(it = v.begin(); it != v.end(); it++) {
    std::cout << *it << std::endl; // *it来访问模板类的具体值
    }
  • auto类型推导关键字,简洁代码。
    1
    2
    3
    4
    std::vector<int> v;
    for(auto it : v) {
    std::cout << *it << std::endl;
    }
  • auto不能用于函数传参。
more ...

C++_基础知识点_2

24 常成员函数

链接_视频

  • 用法: 在成员函数后增加const关键字修饰。int GetNum() const;
  • 作用: 无法修改数据成员,一般用来修饰Get函数。
  • 本质: 成员函数被const修饰后,this指针的类型由T* const变为const T* const,其中T* const表示该指针本身不能被修改,const T* const表示该指针本身和指针指向的内容均不能被修改。
  • 意义: 让编译器提醒开发者该函数不能修改类的成员变量,用于const对象(引用或指针)。
  • mutable关键字能够突破这种限制。mutable int m_num;
more ...

设计模式

0 简介

设计模式 (Design Pattern) 代表了最佳实践,通常被有经验的面向对象的软件开发人员所采用。
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案,是众多软件开发人员经过相当长一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的,多数人知晓的,经过分类编目的,代码设计经验的总结。
使用设计模式是为了重用代码,让代码更容易被他人理解,保证代码可靠性。

more ...