OOP-THU
OOP-THU copied to clipboard
OOP Course Material & QA
课上讲过实现左值与右值转发的一个工具——std::move,我这边想介绍一下实现完美转发的工具,std::forward。 _Note: 所谓“完美转发”是指把参数“原封不动”传给函数。若参数是右值,则参数转为右值;若参数是左值,则传为左值。这样保证了不会丢失参数原本性质。这个方法面向与解决不必要的拷贝函数调用,同时也提高了程序效率。_ std::forward 则解决了完美转发提出的问题。与std::move相比,它的目的是保持参数原本形式,不能从左值换成右值。它在的声明如下: 1. _template T&& forward (typename remove_reference::type& arg) noexcept;_ 2. _template T&& forward (typename remove_reference::type&& arg) noexcept;__ 这样std::forward根据接收参数的实际类型来判断传右值或者左值。何况,返回类型是引用,因此保证了转发中不能复制参数。 _使用例子如下:_ ``` #include #include void checkVal(const int& x)...
[oop复习.pptx](https://github.com/thunlp/OOP-THU/files/8916759/oop.pptx)
正则表达式的拓展
## 正则表达式的拓展应用 正则表达式(Regular Expression)利用普通字符和元字符构成匹配某个句法规则的字符串,常被用来进行大量的数据处理,在课程中我们接触到了一些关于正则表达式的基本用法。这里我们来接触一些正则表达式的拓展用法。 在进行学习的时候,可以在[这个网址](https://regex101.com/)来检验你所写出的正则表达式作用。 ### 正则表达式的非捕获分组 `(?:pattern)`表示非捕获分组,和上课提到的捕获分组的惟一的区别在于,非捕获分组匹配的值并不会被保存下来,这常常用来搜索一些只有部分不相同的整体。比如,我们可以使用`(?:pattern)`与`|`字符来组合一个整体:`part(?:y|ies)`就等价于`party|parties`,而使用`part(y|ies)`虽然可以达到同样的效果,但是会捕获一个无用的分组`y`或者`ies`,这是没有意义的。 ### 正则表达式的预查 预查可以分为四部分,分别是正向和反向的肯定以及否定预查。预查的特点就是,这是一个非获取匹配,与刚才介绍到的非捕获分组十分类似,但区别在于,预查是不消耗字符的,也就是说这段字符可以继续被正则表达式的其他部分匹配。 **正向肯定预查**`(?=pattern)` 对将要捕获的字符串做提前的检查,只捕获符合要求的,比如`Version(?=1.0|1.1)`可以匹配`Version1.0`,但不能匹配`Version2.0`。预查不消耗字符,在任何匹配的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。 **正向否定预查**`(?!pattern)` 与正向肯定预查类似,但要求完全相反。还是以上述例子,`Version(?!1.0|1.1)`,这时,它可以匹配`Version2.0`,但不能匹配`Version1.0`。 **反向肯定预查**`(?[\w]+)`,或者将``换成`''`:`(?'Word'[\w]+))`,这样就把`[\w]+`的组名指定为`Word`了。想要引用这个分组捕获的内容,我们可以使用`\k`,所以上一个例子也可以写成这样:`(?[\w]+)[\s]*:[\s]*\k is a word`。 ### 正则表达式的贪婪与懒惰 `*`、`+`、`?`是我们常用的用来表示重复的元字符,其中`*`可以表示重复任意次,`+`可以表示重复1次及以上,`?`可以表示重复0次或1次,与之类似的还有`{n,m}`、`{n,}`等。 我们在使用这些元字符时,默认的行为是**贪婪匹配**,也就是匹配尽可能多的字符。举个例子,如果我们使用`p.*e`来匹配`procedure`,会捕获到整个字符串`procedure`而不是`proce`。 如果在元字符后加`?`,使其变成`*?`、`+?`、`??`、`{n,m}?`、`{n,}?`等,就会变为**懒惰匹配**,匹配尽可能少的字符。 特别的,在正则表达式中,有另一条规则,比贪婪/懒惰规则的优先级更高:最先开始的匹配拥有最高的优先权。因此,我们在使用`a.*?`匹配`aaabbaabab`的时候,会得到`aaab`而不是`ab`。
这是本人在2022年春季学期OOP课程学习中记录的一份笔记,一方面是对课程内容进行总结,另一方面顺带锻炼了一下markdown的使用(doge),笔记主要是根据自身的学习情况,基于刘老师的课件进行的一些总结,删去了一些重复的表述,对于课件中的非OOP的拓展内容并没有进行整理。在期末复习阶段又进行了一些修改。 [OOP学习笔记.pdf](https://github.com/thunlp/OOP-THU/files/8915263/OOP.pdf)
课程笔记
这是本人本学期每次课后,在复习课程内容过程中所整理的从第三讲到第十四讲的笔记~ [3封装与接口.pdf](https://github.com/thunlp/OOP-THU/files/8916622/3.pdf) [4创建与销毁1.pdf](https://github.com/thunlp/OOP-THU/files/8916623/4.1.pdf) [5创建与销毁2.pdf](https://github.com/thunlp/OOP-THU/files/8916624/5.2.pdf) [6引用与复制.pdf](https://github.com/thunlp/OOP-THU/files/8916625/6.pdf) [7组合与继承.pdf](https://github.com/thunlp/OOP-THU/files/8916626/7.pdf) [8虚函数.pdf](https://github.com/thunlp/OOP-THU/files/8916627/8.pdf) [9多态与模板.pdf](https://github.com/thunlp/OOP-THU/files/8916628/9.pdf) [10课程复习和使用技巧.pdf](https://github.com/thunlp/OOP-THU/files/8916631/10.pdf) [11模板与STL初步.pdf](https://github.com/thunlp/OOP-THU/files/8916633/11.STL.pdf) [12STL和字符串处理.pdf](https://github.com/thunlp/OOP-THU/files/8916634/12STL.pdf) [13STL函数对象与智能指针.pdf](https://github.com/thunlp/OOP-THU/files/8916636/13STL.pdf) [14行为型模式.pdf](https://github.com/thunlp/OOP-THU/files/8916637/14.pdf)
## Makefile通配符与变量的使用 Makefile在我们上课时详细介绍,他为我们提供了“自动编译”的功能,只需要简短的命令,就能将整个工程文件重新编译,极大的降低了工程修改的成本,并提高了软件开发的效率。这里我们介绍一些Makefile的较高级用法。 ### Makefile的通配符 Makefile支持使用shell命令,因此在Makefile中可以直接使用shell所支持的一些通配符,如`*`、`%`、`?`、`[……]`等。 与正则表达式极其类似,其中,`*`与`%`表达匹配任意个字符,`?`表示匹配任意一个字符,`[……]`表示将指定需要匹配的内容放入`[]`中。 例如: ```makefile test:*.cpp g++ -o $@ $^ clean: rm -rf *.o test ``` 在以上代码中,我们看到,`*`既可以用在规则中,也可以用在规则的命令中,此处即表示任意的以`.c`pp或`.o`结尾的文件。 需要特别指出的是,`%`与`*`作用极其类似,但`%`将我们需要的所有文件组合成为一个列表,从列表中依次取出的每一个文件,`%`即为取出文件的文件名。 例如: ```makefile test:*.o g++ -o $@ $^ %.o:%.cpp...
自己于2021-2022学年春季学期**OOP课程**初步整理的学习笔记,主体部分为**随堂记录**,涵盖了课程所授知识的大部,也加入了一些自己课后研究的**思考结果**。 借此机会分享出来希望能对大家的学习有所帮助~ : - ) [oop_notes.pdf](https://github.com/thunlp/OOP-THU/files/8916864/oop_notes.pdf)
前七讲的笔记整理
- 分享一份笔者在前半学期用古老的方式(手写)整理的一些PPT前七讲中的知识点 [OOP前七讲整理.pdf](https://github.com/thunlp/OOP-THU/files/8917248/OOP.pdf)
#62 的一些重排版和更新 : - ) click [here](https://github.com/thunlp/OOP-THU/files/8917298/oop_notes.pdf) to download the file
[拷贝or移动总结.docx](https://github.com/thunlp/OOP-THU/files/8917899/or.docx)