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

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

作者: 曹伟大 | 来源:发表于2017-11-07 00:33 被阅读0次

    一、 转换函数 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 <iostream> 

    using namespace std;

    class CxString

    {

    public:

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

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

    }

    #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 <typename...Types >

    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++学习第四周笔记

          本文链接:https://www.haomeiwen.com/subject/ksqapxtx.html