今日学习笔记

今天起的很晚。
以下为今天的学习笔记,以后只要没有琐事会天天发的。

.hpp是什么, 怎么用:
为c++的头文件,c++允许在.hpp文件中编写函数体的声明和实现代码。在调用函数时只需要包含其头文件即可。

pragma once

保证程序的不重复编译

模板类的静态成员
模板类中的静态成员变量声明了不同的函数实体将产生不同的静态成员变量。
模板参数:

整形模板参数:
    准确的说是整形常量
    #include <iostream>
    #include <stdexcept>
    using namespace std;
    template<typename T, unsigned size>
    class array
    {
        T elems[size];
        public:
        T& operator[](unsigned i) throw (std::out_of_range) {
        if(i >= size) throw std::out_of_range("array access out of range.");
        else return elems[i];
        }
    };
    int main(void)
    {
        array<int, 10> array0;
        try{array0[11] = 0;}
        catch(std::out_of_range& e)
        {
        cerr<<"Access out of range."<<endl;
        }
        return 0;
    }

函数指针模板参数:
    使用了模板技术实现了类似回调的“静态回调”
    #include <iostream>

    template<typename T , void (*f)(T& v)>
    void foreach(T array[], unsigned size)
    {
        for(unsigned i=0; i<size; i++) f(array[i]);
    }
    template<typename T>
    void inc(T &v)
    {
        ++v;
    }
    template<typename T>
    void dec(T &v)
    {
        --v;
    }
    template<typename T>
    void print(T &v)
    {
        std::cout<<" "<<v<<std::endl;
    }
    int main(void)
    {
        int array[] = {1, 2, 3, 4};
        foreach<int, inc<int> >(array, 4);
        foreach<int, print<int> >(array, 4);
        return 0;
    }
指针引用模板参数:
    指针和引用都要声明成全局变量
    #include <iostream>
    using namespace std;
    template<int *p>
    struct wrapper
    {
       int get(){return *p;}
       void set(int v){*p = v;} 
    };

    int global_variable = 0;
    int main(void)
    {
        wrapper<&global_variable> gwrapper;
        gwrapper.set(1);
        cout<<gwrapper.get()<<endl;
        
        return 0;
    }

类成员函数指针模板参数:
    #include <iostream>
    using namespace std;
    class some_value;
    typedef int (some_value::* some_value_mfp)(int);
    template<some_value_mfp func>
    int call(some_value &value, int op){return (value.*func)(op);}
    class some_value{
        int value ;
        public:
        some_value(int _value):value(_value){}
        int add_by(int op){return value += op;}
    };
    int main(void)
    {
        some_value v0(0);
        cout<<call<&some_value::add_by>(v0, 2)<<endl;
        return 0;
    }
模板型模板参数:
    #include <iostream>
    using namespace std;
    template<template<typename TT> class Func, typename T>
    void foreach(T array[], unsigned size)
    {
        Func<T> func;
        for(unsigned i=0; i<size; ++i) func(array[i]);
    }
    template<typename T>
    struct inc
    {
        void operator()(T& v) const {v++;}   
    };
    template<typename T>
    struct print
    {
        void operator()(T& v) const {cout<<" "<<v;}
    };
    int main(void)
    {
        int array[] = {1,2,3,4,5,6};
        foreach<inc, int>(array, 6);
        foreach<print, int>(array, 6);
        return 0;
    }

异常:超出范围的值抛出的:<stdexcept>头文件下的 std::out_of_rang

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 第一天 一.内联函数(inline) 函数调用的时候需要建立栈内存环境,进行参数传递,并产生程序执行转移,这些工作...
    陈果123阅读 1,119评论 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,512评论 1 51
  • 重新系统学习下C++;但是还是少了好多知识点;socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme阅读 19,833评论 0 50
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,784评论 0 27
  • 第一章 计算机与C++编程简介 C++程序6个阶段编程 ->预处理->编译->连接->装入->执行1.程序在编译器...
    rogertan30阅读 3,720评论 0 1