#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>(1, 2) << endl; cout << max<double>(3.1, 4.2) << endl; cout << min<int, char>(100, 'a') << endl; cout << compare("ab", "a"); print("a", 12, 1.23); system("pause"); return 0; }
#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 = 0, int image = 0); 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 <iostream> #include "complexNumber.hpp" //需包含.hpp文件而不是.h文件 int main() { complexNum<int> c1(1, 2); cout << c1; printCom(c1); system("pause"); return 0; }