仅个人学习记录,毫无参考性 望知悉!!!
壹:Conversion function「转换函数2」2.00:10
语法:
转换函数的返回类型就是名称,编译器规定不写返回类型,编译器自动添加
没有参数
不会改变class「类」的值,通常加const
注:任何一个class,只要认为转换合理,都可以写转换函数
non explicit one argument「实参」 ctor3.0:10
explicit「明确的」:仅用于构造函数前,避免编译器将之用于转换,产生二义性「模板存在极少量应用」
标准库栗子:3.13:48
貳:class所产生的对象可能会像两种东西
①像指针「智能指针」 ②像函数「仿函数」
pointer like classes「关于智能指针」
第一大类4.0:0
语法:必然有一个普通的指针「px」
必然有 -> 和 * 的操作符重载
和一个可以接受普通指针的构造函数「将普通指针,包装成智能指针」
注: -> 符号作用的对象完成后可以继续作用
第二大类「关于迭代器」4.12:17
迭代器昨为特殊的智能指针,再于需要特殊的操作符重载 ++和 --
function like classes 「所谓仿函数」5.00:07
当某个东西可以接受()这个操作符,就可以将之称为函数或者像函数的
注:()小括号又名函数调用操作符
语法:class中有对()进行操作符重载的,用意就是变成function「仿函数」
标准库实例:5.07:44
叁:namespace 6.00:00
语法:关键字namespace + 名字 ++{ 需要分隔开的文件 }
注:用于将部分文件区分开,避免函数或类的名称冲突
肆:template「模板」
注: 「泛化」 指在用户使用时,再指定类型
仅仅在模板的<>中typename和class可以通用,由于早期没有typename关键字,临时借用了class
模板在写的时候会编译一次,当使用「指定类型」时需要再次编译
①class template「类模板」7.0.12
②function template「函数模板」8.0.12
③member template「成员函数」9.0.12
①class template「类模板」7.0.12
语法:关键字tempalate + <关键字typename「或class」 + 名字「标记」>
写一个类时,将类的某部分提取出来,将来由用户自己,使用时在指定类型的,就是类模板
②function template「函数模板」8.0.12
语法:关键字tempalate + <关键字typename「或class」 + 名字「标记」>
注:实参推导「函数模板不必指明其类型,编译器会对调用的参数进行推导」
③member template「成员函数」9.0.12
???
伍:specialization「模板特化」
注:特化对某些独特类型,进行「特殊」的设计10.00:40
注:上面框表示泛化,下面框表示特化
浅绿色表示临时对象
partial specialization「模板偏特化」
①个数的偏 ②范围的偏
①个数的偏
②范围的偏
template template parameter「模板模板参数」???
注:模板的参数也是一个模板
陆:c++标准库13.00:00
注:需要熟练掌握,试着将所有算法测试一遍
以及推荐书籍
柒:三个主题14.00:00
①variadic templates「数量不定的模板参数」14.00:19
②
③
①variadic templates「数量不定的模板参数」14.00:19
注:将参数分为两组,一个「正常写」 + 一包「typename + ...」
c++11支持的