博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++进阶1模板的使用
阅读量:6689 次
发布时间:2019-06-25

本文共 1243 字,大约阅读时间需要 4 分钟。

C++进阶1模板的使用 20131010

         C++中,我们自己编程虽然不会怎么使用模板,包括函数模板和类模板,但是在大型的项目开发中函数模板和类模板是非常重要的。笔者在**面试的时候忙问道过这个问题,迷迷糊糊的过了,但自己知道不是很清楚,所以整理一下。

1.函数模板的声明

         函数模板可以用于创建一个通用的函数,用于支持不同类型的参数,避免因为函数的重载重复设计,他最大的特点是把函数使用的数据类型作为参数。

         函数模板的声明形式:

         template <typename T>

         <ReturnType> <functionName> (Arguments){}

       其中template是定义函数模板的关键字,template之后的<>不可以省略,而且内部的typename也是关键字可以使用class,用以说明他后面的标识符是数据类型标识符。这样在以后的这个函数中,凡是希望根据实参数据类型确定数据类型的变量都可以使用数据类型参数标识符来表述。

         如何使用?直接向普通的函数那样直接调用。编译器就会生成对应的函数。也就是模板函数。

2.模板函数的生成

         模板函数的数据类型参数标识符实际上是一个类型参数,使用函数模板的时候,要将这个形参实例化为确定的数据类型。将行使参数实例化的参数称之为模板函数。

         同时可以声明多个参数类型,在一个函数中可以同时使用它们。

         在函数模板中,可能会因为数据类型的转换而产生异常。但是函数的重载是支持参数的隐式类型转换,所以如果在定义了函数模板之后,在重载一个函数,他有着明确的参数类型,就不会出现异常了。

3.类模板

         声明的格式:

         template <class T>

         class A{};

         这样在类定义体外定义的成员函数,需要使用函数模板。

#include <iostream>

#include <string>

using namespace std;

template <typename T>

class Base{

private:

    T value;

public:

    Base(){

        cout << "Base::constructor" << endl;

    }

    Base(T v){

        this->value = v;

    }

    T getValue(){

        return this->value;

    }

    virtual ~Base(){

        cout << "Base::~Base()" << endl;

    }

};

 

int main()

{

    Base<string> b("yangtengfei");

    cout << b.getValue() << endl;

    Base<int> b1 (3);

    cout << b1.getValue ()<< endl;

    return 0;

}

 

追梦的飞飞

于广州中山大学20131010

HomePage:

转载于:https://www.cnblogs.com/hbhzsysutengfei/p/3409497.html

你可能感兴趣的文章
php多态设计
查看>>
oracel SQL多表查询优化
查看>>
Spring-Context的注解实现依赖注入功能
查看>>
CSS格式化 CSS代码压缩工具
查看>>
Android的TextView使用Html来处理图片显示、字体样式、超链接等
查看>>
mvc伪静态<三> IIS配置
查看>>
.NET设计模式(12):外观模式(Façade Pattern)(转)
查看>>
【leetcode】Maximum Gap(hard)★
查看>>
Visual Studio中的lib的链接顺序
查看>>
Cacti安装详细步骤
查看>>
android自定义radiobutton样式文字颜色随选中状态而改变
查看>>
【CodeForces 604B】F - 一般水的题1-More Cowbe
查看>>
用JS获取地址栏参数的方法
查看>>
javascript中实现sleep函数
查看>>
ionic 001
查看>>
@params、@PathVariabl和@RequestParam用法与区别
查看>>
wxPython 4.0.0b2安装
查看>>
Android RecyclerView利用Glide加载大量图片into(Target)导致OOM异常
查看>>
UGUI表情系统解决方案
查看>>
ubuntu 下执行定时任务
查看>>