lxidea的 Boolan C++面向对象高级编程(下)学习笔记(一)

本周进行的是“革命尚未成功,同志仍需努力”这段话中,那众多细小但重要的细枝末节。
以下是他们的罗列

  1. Conversion Function
  2. non-explicit one argument constructor
  3. pointer-like classes
  4. Function-like classes
  5. namespace经验谈
  6. class template
  7. Function Template
  8. Member Template
  9. specialization
  10. 模板偏特化
  11. 模板模板参数
  12. 关于C++标准库
  13. 三个主题
  14. Reference
  15. 复合&继承关系下的构造和析构

其实老实说,这周并没有着重讲函数的虚表vptr,但是作业却是这样。是不是我遗漏了什么,还是说课程之前进行过改动,但作业没有变动。以下,记录一下它们的内容,当然,有些内容之前的课程其实有提过的,那么就没有必要过多强调。

1. conversion function

本周首先讲到的就是上一周遗留下来的那个operator type()。它可以在你认为合理的时候,自动的把一个class转换成为另一个类型。转换函数在函数名前面不能指定函数类型,函数也没有参数,至于是否要加const,根据转换后的结果来判定,一般都会加上const。在使用过程中,不必显示地调用类型转换函数,它往往是自动被调用的,即隐式调用。

2. non-explicit one argument constructor

explicit关键词可以防止编译器自动的从一种类型隐式的自动的调用class的constrctor,这样可以防止某些你无法预见的结果。所以最好是加上。大多数情况下,这个关键词只用于ctor。

3. pointer-like classes

实际上就是构造了一种智能指针

4. function-like classes,所谓仿函数

5. namespace,即命名空间

命名空间的使用是非常好的习惯,因为假如几个人同时在一个project进行开发,如果事先大家没有交流过的话,那么有很大几率,写出来的class或者struct还有function有重名的可能。如果在这些代码中加入命名空间的限定,那么就完全不需要担心了

6. 类模板

事实上,类模板是泛型编程的一种方式。实现不指定类中某些数据的类型,在使用的时候才进行实际的生成

7. 函数模板

与类模板类似,可以和类模板一同使用

8. 成员模板

在类模板内部,还可以设置成员模板,举例子来说,就是

template <typename T1, typename T2>
struct pair
{
    typedef T1 first_type;
    typedef T2 second_type;

    T1 first;
    T2 second;

    pair()
        :first(T1()), second(T2())
    {}
    pair(const T1& a, const T2& b)
        :first(a), second(b)
    {}

    template <typename U1, typename U2>
    pair(const pair<U1, U2>& p)
        : first(p.first), second(p.second)
    {}
};

9. specialization,也叫模板全特化

针对类模板或者模板类的实现时,可以在模板参数比较特别的时候,单独指定一种特殊实现方式。而且这种时候,模板的所有参数都额外指定了。否则就称为偏特化

10. 模板偏特化

11. template template parameter,模版模版参数

12. Reference

13. variadic templates (since C++11)

这个东西叫做可变模板参数。模板参数在2.0之前都是固定的,但是这里,Bang,可以变化了。那么有一些固定的编译器给定的新关键字,教学课件中有如下的代码

void print()
{
}

template <typename T,typename... Types>
void print(const T& firstArg, const Types&... args)
{
    cout << firstArg << endl;
    print(args...);
}

其中...这种是必须要写的。如果想获取args这个包里面参数的个数,可以用sizeof...(args)来取得。

14. auto (since C++11)

auto是新的特性,可以让编译器自动的为我们添加变量的类型声明
比如原有代码的样子,我们实现声明ite的类型是list<string>的迭代器

list<string> c;
...
list<string>::iterator ite;
ite = find(c.begin(),c.end(),target);

使用auto之后,编译器自动指定ite的类型是c这种东西的迭代器,c是list<string>,所以代码运行时通过的。

list<string> c;
...
auto ite = find(c.begin(),c.end(),target);

15. ranged-base for (since C++11)

C++2.0中提供了新的for循环格式,如下

for (delc : coll)
{
    statement;
}

其中,coll是个容器,编译器看到后,会进到容器中,把一个一个的元素取出来,放到前面的delc中,同时执行下方的statement语句。因此,可以有更加简洁的代码,比如说下面的代码

vector<double> vec;
…
for (auto elem : vec)
{
    cout << elem << endl;
}

for (auto& elem : vec)
{
    elem += 3;
}

总的来说,本周的C++内容已经开始从一马平川向着攀登珠峰在进发了,所述的内容也从初学者的知识掌握渐渐转变为更加底层更加高端的实际用法。这个时候,如果掌握好了,那么对后面是起到良好的基础的作用,不然就真的要打退堂鼓了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281