模板类中包函模板类与函数

 1 //1.在类中完成声明与定义
 2 
 3 #include <iostream>
 4 
 5 template <class T1,class T2>
 6 class A
 7 {
 8 public:
 9     T1 i;
10     T2 t;
11     A(T1 i, T2 t) :i(i), t(t) {}
12     void print()
13     {
14         std::cout << i <<" " << t << std::endl;
15     }
16     //在模板类中定义一个模板类
17     template <class T>
18     class B
19     {
20     public:
21         T b;
22         B() {}
23         B(T b) :b(b) {}
24         void print()
25         {
26             std::cout <<"B:" << b << std::endl;
27         }
28     };
29     B<int> m_b;
30     
31 
32     //在模板类中定义一个模板函数
33     template <typename T>
34     void show(T t)
35     {
36         std::cout <<"show()" << t << std::endl;
37     }
38 };
39 
40 int main()
41 {
42     A<int,int> a(1, 2);    
43     a.print();
44     a.show(10); //这里也可以显示指定SHOW 参数类型 a.show<int>(10)
45     a.m_b.print();
46     
47     A<int, int>::B<int> b(10); //创建一个A类里面的子类B
48     b.print();
49     return 0;
50 }
 1 //2.在类中完成声明 在外部定义
 2 
 3 #include <iostream>
 4 
 5 template <class T1,class T2>
 6 class A
 7 {
 8 public:
 9     T1 i;
10     T2 t;
11     A(T1 i, T2 t) :i(i), t(t) {}
12     void print()
13     {
14         std::cout << i <<" " << t << std::endl;
15     }
16     //在模板类中定义一个模板类
17     //这里也可以写成一行 template <class T>    class B    
18     template <class T>
19     class B
20     {
21     public:
22         T b;
23         B() {}
24         B(T b) :b(b) {}
25         void print();
26         
27     };
28     B<int> m_b;
29     
30 
31     //在模板类中定义一个模板函数
32     //这里也可以写成一行 template <typename T>    void show(T t);
33     template <typename T>
34     void show(T t);
35     
36 };
37 //这里也可以写成一行 template <class T1, class T2> template <class T> void A<T1, T2>::B<T>::print()
38 template <class T1, class T2>
39 template <class T>
40 void A<T1,T2>::B<T>::print()
41 {
42     std::cout << "B:" << b << std::endl;
43 }
44 
45 //这里也可以写成一行 template <class T1, class T2> template <typename T> void A<T1, T2>::show(T t)
46 template <class T1, class T2>
47 template <typename T>
48 void A<T1, T2>::show(T t)
49 {
50     std::cout << "show()" << t << std::endl;
51 }
52 
53 int main()
54 {
55     A<int,int> a(1, 2);    
56     a.print();
57     a.show(10); //这里也可以显示指定SHOW 参数类型 a.show<int>(10)
58     a.m_b.print();
59     
60     A<int, int>::B<int> b(10); //创建一个A类里面的子类B
61     b.print();
62     return 0;
63 }

 

posted on 2026-01-27 15:28  海的寂寞  阅读(0)  评论(0)    收藏  举报

导航