#include<iostream>
#include<typeinfo>
#include<cstring>

using namespace std;

class A
{
public:
A(int x, int y) :m_x(x), m_y(y)
{

}

int compare(void)
{
cout << "Type of m_x is" << typeid (m_x).name() << endl;
cout << "Type of m_y is" << typeid (m_y).name() << endl;

if (m_x < m_y)
return -1;
if (m_x > m_y)
return 1;

return 0;

}
private:
int m_x;
int m_y;

};

class B
{
public:
B(double x, double y) :m_x(x), m_y(y)
{
}
int compare(void)
{
cout << "Type of m_x is" << typeid (m_x).name() << endl;
cout << "Type of m_y is" << typeid (m_y).name() << endl;

if (m_x < m_y)
return -1;
if (m_x > m_y)
return 1;

return 0;

}
private:
double m_x;
double m_y;

};

class C
{
public:
C(string x, string y) :m_x(x), m_y(y)
{

}

int compare(void)
{
cout << "Type of m_x is" << typeid (m_x).name() << endl;
cout << "Type of m_y is" << typeid (m_y).name() << endl;

if (m_x < m_y)
return -1;
if (m_x > m_y)
return 1;

return 0;

}
private:
string m_x;
string m_y;

};

template < class T> class D
{
public:
D(T x, T y) : m_x(x), m_y(y)
{
}

int compare(void)
{
cout << "Type of m_x is" << typeid (m_x).name() << endl;
cout << "Type of m_y is" << typeid (m_y).name() << endl;

if (m_x < m_y)
return -1;
if (m_x > m_y)
return 1;
}
private:
T m_x;
T m_y;
};

int main(int agrc, char* argv[])
{
// 不用模板
int r;
A a(10, 20);
cout << "A:: Compare() return " << a.compare() << endl;

B b(0.1, 0.2);
cout << "B:: Compare() return " << b.compare() << endl;

C c("pan", "tan");
cout << "C:: Compare() return " << c.compare() << endl;

cout << "====================================" << endl;
//用模板类

D<int> d1(10, 20);
cout << "A:: Compare() return use panel " << d1.compare() << endl;

D <double> d2(0.1, 0.3);
cout << "B:: Compare() return use panel" << d2.compare() << endl;

cin >> r;
}

学习C++ 模板类的更多相关文章

  1. C++学习34 模板类

    C++除了支持模板函数,还支持模板类.模板类的目的同样是将数据类型参数化. 声明模板类的语法为: template<typename 数据类型参数 , typename 数据类型参数 , …&g ...

  2. C++学习三 模板类出错总结(Missing template arguments before 'L')

    一.模板类的说明 模板类有一个好处是可以放宽你输入的数据类型. 比如有这样的一个函数: int add(int x, int y) { return x+y; } 这个函数对于int类型的x,y才适合 ...

  3. 读书笔记_Effective_C++_条款四十三:学习处理模板化基类的名称

    背景是这样的,有两个不同的公司,然后想设计一个MessageSender,为这两个公司发送不同的消息,既支持明文发送SendClearText,也支持密文发送SendEncryptedText.一种思 ...

  4. C++学习笔记36:类模板

    类模板的目的 设计通用的类型式,以适应广泛的成员数据型式 类模板的定义格式 template<模板形式参数列表>class 类名称{...}; 原型:template<typenam ...

  5. C++ 模板学习 函数模板、类模板、迭代器模板

    使用模板能够极大到使得代码可重用. 记录一下,方便后续使用. 1. 函数模板,支持多种类型参数 #include <stdio.h> #include <math.h> //函 ...

  6. C++学习笔记(3)----类模板的static成员

    与任何其他类相同,类模板可以声明 static 成员: template <typename T> class Foo { public: static std::size_t count ...

  7. C++学习笔记(2)----类模板和友元

    当一个类包含一个友元声明时,类与友元各自是否是模板是相互无关的.如果一个类模板包含一个非模板友元,则友元被授权可以访问所有模板实例.如果友元自身是模板,类可以授权给所有友元模板实例,也可以只授权给特定 ...

  8. ###STL学习--标准模板库

    下面进行STL的学习.希望能了解标准模板库中的常用容器,迭代器,可以自由运用STL以提高编写代码的效率.下面的内容我想以知识点为总结,不再像<Effective C++>那样以章节进行总结 ...

  9. C++学习之友元类和友元函数

    C++学习之友元类和友元函数       模板类声明也可以有友元,模板的友元可以分为以下几类:        1.非模板友元:        2.约束模板友元,即就是友元的类型取决于类被实例化的时候的 ...

随机推荐

  1. poj2528 线段树+离散化 (倒序)

    The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign h ...

  2. Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined)D. Felicity's Big Secret Revealed

    题目连接:http://codeforces.com/contest/757/problem/D D. Felicity's Big Secret Revealed time limit per te ...

  3. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    开发环境搭建好之后,还需要一个集成开发环境也就是IDE来进行编程.这里推荐的IDE是IDEA,那个老掉牙的Eclipse还是先放一边吧,(手动滑稽). IDEA的下载地址:http://www.jet ...

  4. 在CentOS6上配置MHA过程全记录

    在CentOS6上配置MHA过程全记录 MHA(Master High Availability)是一款开源的MariaDB or MySQL高可用程序,为MariaDB or MySQL主从复制架构 ...

  5. Django 1.10中文文档-聚合

    Django 数据库抽象API 描述了使用Django 查询来增删查改单个对象的方法. 然而,有时候你要获取的值需要根据一组对象聚合后才能得到. 这个主题指南描述了如何使用Django的查询来生成和返 ...

  6. swoole 入门

    1. 概述 Swoole是PHP的一个扩展,但是它与普通的扩展不同,普通的扩展知识提供一个库函数,而Swoole扩展在运行后会接管PHP的控制器,进入时间循环.当IO时间发生后,Swoole会自动回调 ...

  7. Python自学笔记-面向对象编程(Mr seven)

    类的成员可以分为三大类:字段.方法和属性. 一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 二.方法 方法 ...

  8. tcpdump 使用实践

    tcpdump常用配置指导 参考:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 1. 指定端口抓包  -i 说明: ...

  9. C#枚举中使用Flags特性

    如果对一个值可以包含多个,那么可以使用枚举,加上Flags 本文告诉大家如何写一个 Flags. 在写前,需要知道一些基础知识,取反.或.与,如果不知道的话,请去看看基础. 当然,这些太复杂了,我也不 ...

  10. Java中数组的遍历

    (I)标准for循环遍历数组 例如代码片段: int [] nums = new int [] {0,1,2,3,4,5,6,7,8,9}; for(int i=0;i<11;i++){ Sys ...