博览网--C++面向对象高级编程(下)-- C++学习第四周笔记

一、 转换函数 conversion function

1) 转换函数没有返回类型,函数名称就是转换后的类型

2) 通常都会加上const;

double d=4+f     编译过程是否是先找操作符重载,不满足再找类型转换(待确定)

转换(faction -> double)

3)  转换函数不一定是基本类型

二、no-explicit-one-argument/explicit-one-argument ctor

1) 显式构造函数:

按照默认规定, 只有一个参数的构造函数也定义了一个隐式转换, 

explicit关键字只对有一个参数的类构造函数有效, (其他参数没有默认值, 如果有默认值也按照一个参数处理)

关于 explicit  下面链接的作者说得比较清楚

http://www.cnblogs.com/ymy124/p/3632634.html

参考他的博文写了一个例子


#ifndef __CXSTRING__

#define __CXSTRING__

#include  

using namespace std;

class CxString

{

public:

explicit CxString (int age)              { cout << "ctor 1" << endl; }

CxString (const char *p)                 { cout << "ctor 2" <

}

#include#include "cxstring.h"

using namespace std;

int main() {

CxString string1(24);

CxString string2 = 10;

//CxString string3;

CxString string4("abc");

CxString string5 = "def";

//string3 = string1;

return 0;

}

新增 explicit 后  编译报错

week4test.cpp:9:21: error: invalid conversion from ‘int’ to ‘const char*’ [-fpermissive]

CxString string2 = 10;

                               ^

目前看如果对 有  CxString (int age) 未 增加 explicit 编译器 对 10 进行了  CxString(10)的转换, 而增加explicit后编译器使用另外一个只有一个参数的构造函数函数  CxString (const char *p) 对 10 进行转换, 这个时候由于参数类型不同编译报错

应证了“按照默认规定, 只有一个参数的构造函数也定义了一个隐式转换,”



三、 pointer like class

关于智能指针, share-pointer   ->操作符可以复用

关于迭代器: 操作符重载


四、 function like class

对操作符号() 的重载


五、 namespace

划分作用域


六、类模板

类模板需要写明类型

七、 函数模板

函数模板使用式编译器再进行确定, 不需要写明类型

八、成员模板

模板中包含模板

九、模板特化


十、模板偏特化

1)个数

2)范围 类型变为指针

十一、模板模板参数

1)将一个模板做为另外一个模板的参数

十二、关于C++标准库

1)容器:

2)迭代器;

3)仿函数;

4)算法;

十三 、 variadic templates

数量不定的模板参数

template

function (const Types& ... args)

sizeof...(args) 参数个数

十四 、 auto

编译器自动推导类型, 只有再定义并初始化赋值时有效


十五、 ranged-base for

for (decl: coll) {

    statement

}

十六、 reference

reference一般用于参数传递和函数返回;

函数签名(函数名+参数部分) const也属于签名一部分


十七、 object model

1) 继承和构造和析构  构造先父类后子类, 析构先子类后父类

2) 组合的构造和析构  container调用component 构造, 再构造自己,  container先自己析构, 再析构component

3) 继承+组合  base -> component  ->子类  析构 子类->component -> base 

你可能感兴趣的:(博览网--C++面向对象高级编程(下)-- C++学习第四周笔记)