//模板函数
#include <iostream>
using namespace std;
template <typename T>
void myswap(T& a, T & b) {
T temp = a;
a = b;
b = temp;
}
template <typename T>
class A {
public:
A(T a) {
this->a = a;
}
void printA() {
cout << "-----------" << a << endl;
}
private:
T a;
};
//模板类作为参数传入函数
void fun(A <int> & a) {
a.printA();
}
//模板类作为参数传入模板函数
template <typename T>
void fun1(A <T>& a) {
a.printA();
}
//模板类的继承
class B :public A<int> {
public:
B(int a, int b) :A(a) {
this->b = b;
this->a = a;
}
void printb() {
cout << "???????????" << b << endl;
cout << "???????????" << a << endl;
}
private:
int b;
int a;
};
//继承模板类
template <typename T>
class C :public A<T> {
public:
C(T a, T c) :A<T>(a) {
this->c = c;
this->a = a;
}
void printc() {
cout << "???????????" << c << endl;
cout << "???????????" << a << endl;
}
private:
T c;
T a;
};
int main() {
int a = 10;
int b = 20;
myswap<int>(a, b);//模板函数 此处<int>可有可无
cout << "a:" << a << endl;
cout << "b:" << b << endl;
char x = 'x';
char y = 'y';
myswap<char>(x, y);
cout << "x:" << x << endl;
cout << "y:" << y << endl;
A<int> al(10);
al.printA();
fun(al);
fun1<int>(al);
A<float> a2(9.9);
a2.printA();
B b1(100, 200);
b1.printb();
b1.printA();//可以调用父亲的方法
C <float> c1( 9.9, 8.8);
c1.printc();
return 0;
}
运行结果:
a:20
b:10
x:y
y:x
-----------10
-----------10
-----------10
-----------9.9
???200
???100
-----------100
???8.8
???9.9