C++学习笔记7——模板
函数模板:
#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——模板的更多相关文章
- OpenCV 学习笔记(模板匹配)
OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...
- Python Flask学习笔记之模板
Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...
- Angular 5.x 学习笔记(1) - 模板语法
Angular 5.x Template Syntax Learn Note Angular 5.x 模板语法学习笔记 标签(空格分隔): Angular Note on github.com 上手 ...
- tornado 学习笔记8 模板以及UI
Tornado 包含一个简单.快速而且灵活的模板语言. Tornado同样可以使用任何其他的python模板语言,虽然没有集成这些模板语言进RequestHandler.ren ...
- C++学习笔记30:模板与型式参数化
转型操作 接受目标型式作为模板参数 Programmer *p = dynamic_cast<Programmer*>(e) 模板工作原理 使用template<typename T ...
- play framework学习笔记之 模板引擎
模板语法 ${client.name} ${client?.name} 不能确定client是否存在的时候? #{extends /} #{doLayout /}#{get} #{set} 比如 #{ ...
- C++学习笔记之模板(1)——从函数重载到函数模板
一.函数重载 因为函数重载比较容易理解,并且非常有助于我们理解函数模板的意义,所以这里我们先来用一个经典的例子展示为什么要使用函数重载,这比读文字定义有效的多. 现在我们编写一个交换两个int变量值得 ...
- C++ Primer 学习笔记_76_模板与泛型编程 --模板定义[续]
模板与泛型编程 --模板定义[续] 四.模板类型形參 类型形參由keywordclass或 typename后接说明符构成.在模板形參表中,这两个keyword具有同样的含义,都指出后面所接的名字表示 ...
- 高放的c++学习笔记之模板与泛型编程
函数模板 作用 有很多时候参数的类型以及返回值的类型是可变的,我们通过定义模板来让函数能更灵活的运用. 我们设计一个比较函数,如果能比较的两个参数是int型的,两个参数也可能都是string型的,单独 ...
随机推荐
- [Locked] Paint Fence
Paint Fence There is a fence with n posts, each post can be painted with one of the k colors. You ha ...
- 《算法问题实战策略》-chaper8-动态规划法
Q1:偶尔在电视上看到一些被称为“神童”的孩子们背诵小数点以后几万位的圆周率.背诵这么长的数字,可利用分割数字的方法.我们用这种方法将数字按照位数不等的大小分割后再背诵. 分割形式如下: 所有数字都相 ...
- Spring与Hibernate集成中的Session问题
主要讨论Spring与Hibernate集成中的session问题 1.通过getSession()方法获得session进行操作 public class Test extends Hibernat ...
- JAR WAR EAR包的区别
jar包和war包的区别: war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块.而jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令 ...
- url找不到指定位置
刚才遇到了把css装入一个文件夹下,然后有的图片失效了. 后来解决是在.css里把./images 换成 ../images 原来css找图片的地址是基于自身.css文件的位置寻找的,不是以引用它的. ...
- HDU 4622 多校第三场1002 后缀自动机
比赛的时候我是用后缀数组的,但是T了. 赛后看了解题报告说,后缀数组貌似是卡你常数的时间,我算了下复杂度O(T * Q * n).这是10 ^ 8,但是考虑到每次询问的时候都要重新构造字符,所以那个n ...
- PHP安全编程:会话数据注入 比会话劫持更强大的攻击(转)
一个与会话暴露类似的问题是会话注入.此类攻击是基于你的WEB服务器除了对会话存储目录有读取权限外,还有写入权限.因此,存在着编写一段允许其他用户添加,编辑或删除会话的脚本的可能.下例显示了一个允许用户 ...
- 基于SSH的数据库中图片的读写
近期项目中遇到了这个问题,网上查了一些资料所谓是零零散散,这里写篇博文做个笔记. 注:这篇博文中部分类的属性声明未列出,应该不算难,基本都是以private 类型 名称 格式声明,然后配getter ...
- 几句话实现导航栏透明渐变 – iOS
首先我们来看下效果 一开始当我们什么只设置了一张图片作为它的头部视图的时候,它是这样的 首当其冲的,我们先得把导航栏弄透明 那么我们首先得知道,设置navigationBar的BackgroundCo ...
- LeanCloud使用入门(android)
LeanCloud算是一个简单易用的云服务器,其中包含了强大的数据库支持,我们只需要将此服务器应用到本地的代码即可实现后台的存储与交互. 那么,如何简单实现本地代码和LeanCloud服务器的交互呢? ...