C++ template学习二 类模板定义及实例化

一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。
如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。

//templatedemo.h
#ifndef TEMPLATE_DEMO_HXX
#define TEMPLATE_DEMO_HXX

template <class T>
class test
{
  public:
    test(){};
    T add(T a,T b);
};
#endif

//templatedemo.cpp
#include <iostream>
#include "templatedemo.h"

template<class T>
T test<T>::add(T a,T b)
{
  return a+b;
}

int main()
{
  test<int> a;
  test<double> d;
  std::cout<<a.add(2,3)<<std::endl;
  std::cout<<d.add(5.0,6.1)<<std::endl;

  return 0;
}

时间: 2024-10-08 02:15:11

C++ template学习二 类模板定义及实例化的相关文章

C++ Primer 学习笔记_77_模板与泛型编程 --实例化

模板与泛型编程 --实例化 引言: 模板是一个蓝图,它本身不是类或函数.编译器使用模板产生指定的类或函数的特定版本号.产生模板的特定类型实例的过程称为实例化. 模板在使用时将进行实例化,类模板在引用实际模板类型时实例化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化. 1.类的实例化 当编写Queue<int>qi时,编译器自己主动创建名为Queue<int>的类.实际上,编译器通过又一次编写Queue模板,用类型int取代模板形參的每次出现而创建Queue<int

C++ 模板的编译 以及 类模板内部的实例化

在C++中,编译器在看到模板的定义的时候,并不立即产生代码,只有在看到用到模板时,比如调用了模板函数 或者 定义了类模板的 对象的时候,编译器才产生特定类型的代码. 一般而言,在调用函数的时候,只需要知道函数的声明即可: 在定义类的对象时,只需要知道类的定义,不需要成员函数的定义. 但是,这对于模板编译是不奏效的,模板要进行实例化,则必须能够访问定义模板的源代码,当调用函数模板以及类模板的成员函数 的时候,需要知道函数的定义. 标准C++对于模板的编译提供了两种策略: 相同之处:"将类定义以及函

Java知多少(18)类的定义及其实例化

类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: 1 public class Dog{ 2 String name; 3 int age; 4 5 void bark(){ // 汪汪叫 6 System.out.println("汪汪,不要过来"); 7 } 8 9 void hungry(){ // 饥饿 10 System.out.println("主人,我饿了"); 11 } 12 } 对

Ruby学习: 类的定义和实例变量

ruby是完全面向对象的,所有的数据都是对象,没有独立在类外的方法,所有的方法都在类中定义的. 一.类的定义语法 类的定义以 class 关键字开头,后面跟类名,以 end标识符结尾. 类中的方法以 def关键字开头,后面跟方法名及参数列表(如果有的话),以 end标识符结尾. 类也有构造函数,名字必须为initialize. 对象通过new来创建,new是类的方法. 举例如下: class Demo def initialize puts "begin create object"

C++ Primer 学习笔记_78_模板与泛型编程 -实例化[续]

模板与泛型编程 --实例化[续] 二.函数模板的显式实参 在某些情况下,不可能推断模板实参的类型.当函数的返回类型必须与形参表中所用的所有类型都不同时,最常出现这一问题.在这种情况下,有必要覆盖模板实参推断机制,并显式指定为模板形参所用的类型或值. 1.指定显式模板实参 如果函数形参类型不统一,该如何指定sum的返回类型? template <class T, class U> ??? sum(T, U); 此时使用任一形参调用都一定会在某些时候失败: sum(3, 4L); // 第二个类型

面向对象-类的定义和实例化

面向对象是一种认识世界,分析世界的方法论,将万事万物抽象为类 类class 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征集合 用计算机语言来描述类,就是属性和方法的集合 对象instance,object 对象是类的具象,是一个实体 一切皆对象 对象是数据和操作的封装 对象是独立的,但是对象之间可以相互作用 面向对象三要素 1.封装 组装,将数据和操作组装到一起 隐藏数据,对外只暴露一些接口,通过接口访问对象 2.继承 多复用,继承来的就不用自己写 多继承少修改,ocp使用继承来改变,

C++ template学习一(函数模板和模板函数)

函数模板和模板函数(1)函数模板函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数.函数模板的声明形式为:template<typename(或class) T><返回类型><函数名>(参数表){ 函数体}其中,template是定义模板函数的关键字:template后面的尖括号不能省略:typename(或class)是声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型标识符

C#学习二维数组定义及初始化

声明数组时将其初始化,如下例所示: int[,] myArray = new int[,] {{1,2},{3,4},{5,6},{7,8}}; 初始化數組但不指定級別: int[,] myArray = {{1,2},{3,4},{5,6},{7,8}}; 声明一个数组变量但不将其初始化,必须使用 new 运算符数组分配给此变量. int[,] myArray; myArray = new int[,]{{1,2},{3,4},{5,6},{7,8}}; myArray = [,]{{1,2}

Java类的定义及其实例化

如果你不了解类和对象的概念,请猛击这里:Java类和对象的概念 类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog{ String name; int age; void bark(){  // 汪汪叫 System.out.println("汪汪,不要过来"); } void hungry(){  // 饥饿 System.out.println("主人,我饿了")