C++面向对象编程<十三>:template和reference

class template 、function template以及member template;
class template 和 function template前面的文章讲过

member template

在标准库很多构造函数会出现。
语法如下
这里写图片描述
class就是个模板,而成员里还有个模板。T1、T2可以变化,U1、U2也可以变化。
见下面栗子(还是图比较清楚能描述意思)
这里写图片描述
再看个例子(智能指针)
这里写图片描述
指针是指向下面的,这是合理的,如有个指向动物的指针,你让它指向猪、猫都行。既然指针可以,智能指针也必须可以。

specialization,模板特化

泛化就是模板,特化的意思就是指你作为一个设计者,你可能要面对一些特殊的类型要单独处理。
解释:上面的是泛化,下面的是特化。且下面的都对()进行重载。
这里写图片描述

partial specialization,模板偏特化

泛化又分为:全泛化(full specialization)和(partial specialization,模板偏特化(局部特化))
偏特化:个数上的偏,范围上的偏。
如下图,个数上的偏特化。一定要从左边到右边,不能跳着来
这里写图片描述
范围上的偏特化,如下,T是任意类型,现在把它范围缩小成指针,如下
这里写图片描述

template template parameter,模板模板参数

见下图
指定一个容器,一个容器元素的类型,很有弹性。
这里写图片描述

关于C++标准库

一句话:标准库很重要!!!主要部分见下图
这里写图片描述
怎么学习?统统去试一遍!!!

reference

变量有三种:pointer , self , reference。
从内存角度上看。
下面看程序

#include <iostream>
using namespace std;

typedef struct Stag
{
    int a;
    int b;
    int c;
    int d;  
}S;

int main(void)
{
    double x = 0;
    double *p = &x;
    double &r = x;

    cout << sizeof(x) << endl;  //8
    cout << sizeof(p) << endl;  //4(32位),8(64位)
    cout << sizeof(r) << endl;  //0X9ffe30 
    cout << p << endl;          //0
    cout << *p << endl;         //0
    cout << x << endl;          //0
    cout << r << endl;          //0X9ffe30 
    cout << &x << endl;         //0X9ffe30 
    cout << &r << endl;         //0X9ffe30 

    S s;
    S& rs = s;
    cout << sizeof(s) << endl;   //16
    cout << sizeof(rs) << endl;  //16
    cout << &s << endl;          //0X9ffe20 
    cout << &rs << endl;         //0X9ffe20 

    return 0;
} 
  • reference的常见用途
    reference就是一种漂亮的pointer,reference通常不用于声明变量,而用于参数类型和返回类型的描述
    以下被视为“same signature”(所以二者不能同时存在)
double imag(const double& im) { ... }
double imag(const double im) { ... } // ambiguity
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值