第四周笔记(Boolan)

泛型编程与面向对象编程是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//???

{

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))