函数模板:

#include <iostream>
using namespace std; template <typename T>
T max(const T &lhs, const T &rhs)
{
return lhs > rhs ? lhs : rhs;
} template <typename T,class U>//在模板参数列表中,typename和class没有区别
T min(const T &lhs, const U &rhs)
{
return lhs > rhs ? rhs : lhs;
} //非类型函数模板
template<unsigned N, unsigned M>
int compare(const char(&p1)[N], const char(&p2)[M])
{
return strcmp(p1, p2);
} //可变参函数模板 函数模板重载
template <typename T>
void print(const T &t)
{
cout << t;
} template <typename T, typename... Args>
void print(const T &t, const Args&... rest)
{
cout << t << ",";
print(rest...);
} int main()
{
cout << max<int>(, ) << endl;
cout << max<double>(3.1, 4.2) << endl; cout << min<int, char>(, 'a') << endl; cout << compare("ab", "a"); print("a", , 1.23); system("pause");
return ;
}

类模板:

#pragma once
#ifndef _COMPLEXNUMBER_
#define _COMPLEXNUMBER_ #include <iostream>
using namespace std; template <typename T> class complexNum; //前置声明
template <typename T> void printCom(complexNum<T> &obj); template <typename T>
class complexNum
{
friend ostream& operator<< <T>(ostream &out, complexNum<T> &rhs);
friend istream& operator>><T>(istream &in, complexNum<T> &rhs);
friend void printCom<T>(complexNum<T> &obj); public:
complexNum(int real = , int image = );
complexNum(const complexNum<T> &obj); public:
complexNum<T>& operator=(const complexNum<T> &rhs); complexNum<T> operator+(const complexNum<T> &rhs); complexNum<T>& operator++(void); //前置++
complexNum<T> operator++(int); //后置++
complexNum<T>& operator+=(const complexNum &rhs);
bool operator>(const complexNum<T> &rhs); private:
T real;
T image;
}; #endif
#include "complexNumber.h"

template <typename T>
complexNum<T>::complexNum(int real, int image) :real(real), image(image){} template <typename T>
complexNum<T>::complexNum(const complexNum &obj) : real(obj.real), image(obj.image){} template <typename T>
std::ostream& operator<<(std::ostream &out, complexNum<T> &rhs)
{
out << rhs.real; if (rhs.image >= )
out << "+"; out << rhs.image << "i" << std::endl; return out;
} template <typename T>
std::istream& operator>>(std::istream &in, complexNum<T> &rhs)
{
return in >> rhs.real >> rhs.image;
} template <typename T>
void printCom(complexNum<T> &obj)
{
operator<<(cout, obj);
} template <typename T>
complexNum<T>& complexNum<T>::operator=(const complexNum<T> &rhs)
{
this->real = rhs.real;
this->image = rhs.image; return *this;
} template <typename T>
complexNum<T> complexNum<T>::operator+(const complexNum<T> &rhs)
{
complexNum tmp; tmp.real = this->real + rhs.real;
tmp.image = this->image + rhs.image; return tmp;
} template <typename T>
complexNum<T>& complexNum<T>::operator++(void)
{
this->real++;
this->image++; return *this;
} template <typename T>
complexNum<T> complexNum<T>::operator++(int)
{
complexNum tmp = *this; this->real++;
this->image++; return tmp;
} template <typename T>
complexNum<T>& complexNum<T>::operator+=(const complexNum &rhs)
{
this->operator+(rhs); return *this;
} template <typename T>
bool complexNum<T>::operator>(const complexNum<T> &rhs)
{
if (this->real > rhs.real)
return true;
else if (this->real < rhs.real)
return false;
else
{
if (this->image > rhs.image)
return true;
else
return false;
}
}
#include <iostream>
#include "complexNumber.hpp" //需包含.hpp文件而不是.h文件 int main()
{
complexNum<int> c1(, );
cout << c1;
printCom(c1); system("pause");
return ;
}

C++学习笔记7——模板的更多相关文章

  1. OpenCV 学习笔记(模板匹配)

    OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...

  2. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  3. Angular 5.x 学习笔记(1) - 模板语法

    Angular 5.x Template Syntax Learn Note Angular 5.x 模板语法学习笔记 标签(空格分隔): Angular Note on github.com 上手 ...

  4. tornado 学习笔记8 模板以及UI

          Tornado 包含一个简单.快速而且灵活的模板语言.       Tornado同样可以使用任何其他的python模板语言,虽然没有集成这些模板语言进RequestHandler.ren ...

  5. C++学习笔记30:模板与型式参数化

    转型操作 接受目标型式作为模板参数 Programmer *p = dynamic_cast<Programmer*>(e) 模板工作原理 使用template<typename T ...

  6. play framework学习笔记之 模板引擎

    模板语法 ${client.name} ${client?.name} 不能确定client是否存在的时候? #{extends /} #{doLayout /}#{get} #{set} 比如 #{ ...

  7. C++学习笔记之模板(1)——从函数重载到函数模板

    一.函数重载 因为函数重载比较容易理解,并且非常有助于我们理解函数模板的意义,所以这里我们先来用一个经典的例子展示为什么要使用函数重载,这比读文字定义有效的多. 现在我们编写一个交换两个int变量值得 ...

  8. C++ Primer 学习笔记_76_模板与泛型编程 --模板定义[续]

    模板与泛型编程 --模板定义[续] 四.模板类型形參 类型形參由keywordclass或 typename后接说明符构成.在模板形參表中,这两个keyword具有同样的含义,都指出后面所接的名字表示 ...

  9. 高放的c++学习笔记之模板与泛型编程

    函数模板 作用 有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用. 我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独 ...

随机推荐

  1. 暴力求解——除法 Division,UVa 725

    Description Write a program that finds and displays all pairs of 5-digit numbers that between them u ...

  2. [JAVA关键字] static & final

    JAVA十分常见的关键字static & final 总的来说final表示常量,即不可更改的:而static表示静态,即全局的 1. final 类:不能被继承 2. final 方法:能被 ...

  3. [Locked] Alien Dictionary

    Alien Dictionary There is a new alien language which uses the latin alphabet. However, the order amo ...

  4. poj 1609 dp

    题目链接:http://poj.org/problem?id=1609 #include <cstdio> #include <cstring> #include <io ...

  5. prim模板题

    题目链接:http://acm.hrbeu.edu.cn/index.php?act=problem&id=1223 #include <cstdio> #include < ...

  6. JSTL和select标签的组合使用

    1.用于根据不同的值显示对应的内容,不能选择 <select name="grade"> <c:choose> <c:when test=" ...

  7. STM8S 独立看门狗配置及使用

    //独立看门口的时钟来源 内部低速时钟 128khz 除以2 即64khz //选择 IWDG_Prescaler_128 //64/128 =0.5 khz 2ms周期 #define IWDG_5 ...

  8. ping and traceroute(tracert)

    1.ping程序简单介绍 这个程序是Mike Muuss编写的.目的是測试另外一台机子是否可达. 运用的协议就是ICMP.运用的是ICMP的回显应答和请求回显两个类型.曾经呢.能ping通说明可以进行 ...

  9. 第十四章 红黑树——C++代码实现

    红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树.红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键 ...

  10. C#读取Word文档内容代码

    首先要添加引用com组件:然后引用: using Word = Microsoft.Office.Interop.Word; 获取内容: /// /// 读取 word文档 返回内容 /// //// ...