美文网首页
第四周笔记(Boolan)

第四周笔记(Boolan)

作者: zslgg | 来源:发表于2017-11-12 21:03 被阅读0次

    泛型编程与面向对象编程是c++两大技术主线 分属不同思维

    继承关系所形成的对象模型(Object Model) 包括隐藏于底层的this指针 vptr(虚指针)vtbl(虚表)vitural mechanism(虚机制)以及virtual function(虚函数)造成的polymorphism(多态)效果

    Conversion function 转换函数

    public:

    Fraction(int num, int den = 1)

          : m_numerator(num), m_denominator(den){ }

    operator double () const{

    Return (double)(m_numerator / m_denominator);

    }  //调用这个函数可以使这个类可以被转化为double  通常会加const

    Fraction f(3,5)

    double d = 4+f;  //调用operator double()

    编译器思路

    :1)找是否重载了+

    2)找是否重载了double

    non-explicit-one-argument ctor

    //explict 可以出现在构造函数前面

    调用 non-ecplicit ctor 将4转为Fraction(4,1)

    然后调用operator+

    Fraction f(3,5);

    Fraction d2 = f + 4;//[Error] ambiguous

    Fraction d2 = f + 4;//[Error] converion from ‘double ‘to ‘Fraction’ request

    double d = 4;//可以通过

    operator double 和 non-explicit 共存时能否编译取决于如何使用

    explicit作用:

    Class vector<bool,Alloc>//???

    {

    Protected;

    reference operator [] (size_type n){

    return *

    }

    point-like-class 设计一个像指针的类

    1)关于智能指针

    2.0之前 auto point  之后 shared_ptr

    2)迭代器

    不但处理*和->还处理++  --

    function-like classes 设计一个行为像函数的类(所谓仿函数)

    函数模板使用时不用指明

    成员模板 member template

    目的:让构造函数更有弹性

    模板特化 (full)specialization

    partial specialization模板偏特化

    (个数的偏)

    可以指定一个元素类型 指定一个分配器

    (范围的偏)

    上面的是泛化 下面的是特化(注:上下的T不是同一个东西)

    模板模板参数 template template parameter

    这不是模板模板参数

    三个主题

    关于variadic template(since C++11)模板参数可变化

    关于auto

    必须在申明的时候就赋值

    关于 range-base for

    for(decl : coll)  //从容器中一个个抓出来 赋值到左边 执行一次statement

    {

    statement

    }

    c++11以前可以用 容器的迭代器和 foreach来实现

    注:pass by value不会改变容器中的数值,而pass by reference会

    相关文章

      网友评论

          本文标题:第四周笔记(Boolan)

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