#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. [Oracle]理解undo表空间

    一.回退段介绍 在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中.一个事物只能将它的回退信息保存到一个回退段中,而多个并行事物可以使用同一个回退段. ...

  2. 【转】NAS群晖DSM 5.0-4458安装教程

    需要准备: 1.一个闲置的U盘,容量大于64M即可. 墙裂建议用如下U盘,可以隐藏成灰群晖,小巧方便. 闪迪(SanDisk)酷豆(CZ33)8GB U盘¥29.9京东商城    2.一台显示器,用于 ...

  3. HDU1068 二分匹配 独立集

    前边和后边性别不同!!!不然NP了 Girls and Boys Problem Description the second year of the university somebody star ...

  4. Laravel框架使用查询构造器实现CURD

    一.什么是查询构造器? ①Laravel 查询构造器(query Builder)提供方便,流畅的接口,用来建立及执行数据库查找语法 ②使用PDO参数绑定,以保护应用程序免于SQL注入因此传入的参数不 ...

  5. memcached讲解

    Memcached 最近空闲的是时候研究了一下缓存,根据公司环境对缓存进行了系统的了解,我们使用memcacheed进行缓存,下面结合我的 理解,以及网上的相关资料,memecached进行讲解. m ...

  6. DevOps之网络

    唠叨话 关于德语噢屁事的知识点,仅提供专业性的精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <网络(Network)> 关于网络的网络架构和网络模型:知识与技能的层次(知道. ...

  7. 改变oracle数据库归档模式_译文

    Changing the Database Archiving Mode 改变数据库归档模式. Purpose 目的 This module describes how you can change ...

  8. Ubuntu安装Java8和Java9

    前言 系统:Ubuntu 16.04 软件: Java8, Java9 Tips: Java 9 的代码由于提供了新特性,所以有些代码并不支持向后兼容.也就是说,用 Java 9 写的代码,有可能在 ...

  9. 深入浅出 Spring

    前言:笔记中提供了大量的代码示例,需要说明的是,大部分代码示例都是以图片的形式展示的,所有的图片都是来自本人所敲代码的截图,不足之处,请大家指正~ 第一部分:环境搭建及 IOC 容器 一.Spring ...

  10. checkbox插件

    1.全选或者全不选 首先判断全选或全不选checkbox是否被选中. 如果被选中,则为每个选项checkbox设置obj.checked='checked'; 如果未被选中,则为每个选项checkbo ...