模板

xiaoxiao2021-02-27  324

#include <iostream> using namespace std; #define PI 3.14 template<class T>//早期写成 template<class T> T maxt(T x, T y) { return (x > y) ? x : y; } //类模版 template<typename T> class Circle{ private: T radius; public: Circle(){};//无参构造函数大括号要补充好 Circle(T r):radius(r){}; T area(); // { // return radius*radius*PI; // } }; //在类外实现成员函数 template<typename T> T Circle<T>::area() { return radius*radius*PI; } //单参数类模板 template<typename T> struct S_tmp{ T a; }; //以单参数类模板定义为参数的模板 template<template<typename S> class T> struct MyTest{ T<int> test;//也不能在这作初始化赋值T<int> test(10); void show() { cout << "test show"<< endl; } }; int _tmain(int argc, _TCHAR* argv[]) { //cout << maxt<int>(4, 6) << endl;//当编译器能够从参数类型推测出模版参数所需的实际类型时,尖括号中的类型可省略 //cout << maxt<double>(6.98, 5.33) << endl; //Circle<int> c1(5); //Circle<double> c2(0.5); //cout << c1.area() << endl; //cout << c2.area() << endl; MyTest<S_tmp> TT;//MyTest<Circle> TT; TT.show(); return 0; } template<typename RT,typename T,typename S> RT mymax(T a, S b) { return (a > b) ? a : b; } template<typename T,typename S> auto mymax2(T a, S b)->decltype(a*b) { return (a > b) ? a : b; } int _tmain(int argc, _TCHAR* argv[]) { //当函数返回值的类型不能由形参直接确定时,要显示提供模版实参,至少提供返回值类型 cout << mymax<double,int,double>(5, 6.2) << endl; cout << mymax<double>(5, 6.2) << endl; //或者用auto cout << mymax2(5, 6.2) << endl; return 0; }

指针实参

和前面一样

T show(T a) { return a; } int _tmain(int argc, _TCHAR* argv[]) { double a = 5; double* pd = &a; cout <<*show(pd) << endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-4521.html

最新回复(0)