Geekban极客班C++ 第四周

原创 2016年05月30日 16:52:24

转换函数

operator double() const { 
      return (double)m_numerator / m_denominator; 
    }//转换函数

Fraction f(3,5);
double d=4+f;

operator double() const为转换函数,将对象的类型转换为double。
在执行d=4+f,编译器先寻找是否重载了+符合表达式的要求,若没有在找是否有转换函数,改变f的类型。

non-explicit-one-argument ctor

one-augument只要一个实参就够了

class Fraction
{
public:
    Fraction(int num, int den=1):m_numerator(num), m_denominator(den){}
    Fraction operator+(const Fraction& f) {} 
}

Fraction d2=f+4;

执行d2=f+4时,编译器发现operator+,但是函数里的参数是Fraction对象,看能否将4转为Fraction对象,找到了Fraction( , ),转为Fraction(4,1)。

explicit-one-argument ctor

explict明确的,只让其拥有构造函数的功能

pointer-like classes,智能指针

template<class T>
class shared_ptr
{
public:
   T& operator*() const
   { return *px; }
   T* operator->() const
   { return px; }
   shared_ptr(T* p):px(p){}
private:
   T* px;
   long* pn;
};
struct Foo
{
   ...
   void method(void){}
};
share_ptr<Foo> sp(new Foo)//创建一个新的指针
Foo f(*sp);//返回得到*px
sp->method();//返回得到px,其中->符号要继续作用,等同于px->method()

智能指针其内部一定带着一个一般的指针
一定要operator * ->

模板偏特化

两种偏特化:1.个数的偏,2:范围的偏

template<typename T,typename Alloc=...>//两个模板参数
class vector
{
..
}
template<typename Alloc=...>//一个模板参数
class vector<bool,Alloc>//将一个模板参数定为bool

范围的偏:若T为任意类型,可将其设为指针,指向任意类型

template<typename T>
class C {};//不是指针调用这
template<typename T>
class C <T*> {}//是指针调用这

variadic templates模板参数可变化

void print(){}
template<typename T,typename... Types>
void print(const T& firstArg,const Types&...args)//接受一个参数,和一包参数
{
   cout<<firstArg<<endl;
   print(args...);//递归
}
print(7.5,"hello",bitset<16>(377),42);

执行过程:接受一个参数7.5,接受剩下的一包参数,再次调用print(),接受一个参数“hello”,和剩下的一包参数,再次递归调用print。当调用至最后一个参数时,将0传入,调用失败,另写一个不要参数的print()。

…就是一个所谓的pack
用于template parameters,就是模板参数包
用于function parameter types,就是函数参数类型包
用于function parameters,就是函数参数包

ranged-base for

for(decl:coll)//decl变量,coll容器
{
   statement
   }

编译器从容器中一个个取出数据。

vectoer<double> vec;
....
for( auto elem : vec){
   cout<<elem<<endl;
}
for( auto& elem: vec){
   elem*=3;
}//传引用,将值乘以3

reference的常见用途

reference通常不用于声明变量,而用于参数类型和返回类型的描述。

double imag(const double& im){...}
double imag(const double  im){...}

上述两个函数不能同时存在。再调用时,编译器不知该调用哪个函数。
const是函数声明的一部分

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Geekban极客班 C++ STL与泛型编程 第一周作业

特征Traits char szNames[]="abc"; std::size_t nLength=strlen(szNames); char* p=szNames; char* q=szNa...

Geekban极客班C++STL与泛型编程 第二周

SetSet和multiset会根据特定的排序准则,自动将元素排序。 两者不同之处在于multiset允许元素重复,但是set不允许。Template<class_Kty,class_Pr=less...

Geekban极客班 C++第五周

vptr和vtbl 只要类里带有虚函数,对象里就会多一个指针。 继承函数是继承函数的调用权,父类有虚函数则子类一定虚函数。 虚指针vptr指向虚表vtbl,虚表中存放虚函数指针。 c++编译器...

Geekban极客班 第三周

继承 复合

Geekban极客班 第二周

构造函数 inline String::String(const char* cstr) { if (cstr) { //判断指针所指是否为空 m_data = ne...

极客班C++(上)第一周课程笔记

防御式声明,const,private。

极客班C++设计模式第一周课堂笔记——设计原则

软件设计的目标是抵御变化,方法是提高复用性。8个重要的设计原则

C++面向对象高级开发_极客班_第二节课笔记

Big threeclass 有两种 ,一种是带指针的另一种是不带指针的。不带指针的类最典型的就是complex类,而带指针的最典型的就是string类。带指针的类有很多特性,其中最重要的就是big ...

GeekBand-极客班-C++算法原理与实践-董飞-课程笔记(一)

GeekBand-极客班-C++算法原理与实践-董飞-课程笔记(一)算法入门和编程风格

极客班 C++(上)第二周学习笔记

Geekband 第二周学习笔记 class without pointer class with pointer
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)