类模板中的成员函数创建时机(5)
类模板中的成员函数和普通类中的成员函数创建时机是有区别的:
1.普通类中的成员函数一开始就可以创建
2.类模板中的成员函数在调用时才创建
1 #include <iostream> 2 using namespace std; 3 4 //类模板中成员函数创建时机 5 //类模板中的成员函数在调用时才会创建 6 7 class Person1 8 { 9 public: 10 void showPerson1(void) 11 { 12 cout << "Person1 show!" << endl; 13 } 14 }; 15 16 class Person2 17 { 18 public: 19 void showPerson2(void) 20 { 21 cout << "Person2 show!" << endl; 22 } 23 }; 24 25 template<class T> 26 class MyClass 27 { 28 public: 29 30 T obj; 31 32 //类模板中的成员函数 33 void func1(void) 34 { 35 obj.showPerson1(); 36 } 37 38 void func2(void) 39 { 40 obj.showPerson2(); 41 } 42 }; 43 44 void test_01(void) 45 { 46 MyClass<Person1>m; 47 m.func1(); 48 m.func2();//报错,类模板成员函数func2中的showPerson2不是Person1的成员 49 50 } 51 52 int main(void) 53 { 54 test_01(); 55 56 system("pause"); 57 return 0; 58 }
1 #include <iostream> 2 using namespace std; 3 4 //类模板中成员函数创建时机 5 //类模板中的成员函数在调用时才会创建 6 7 class Person1 8 { 9 public: 10 void showPerson1(void) 11 { 12 cout << "Person1 show!" << endl; 13 } 14 }; 15 16 class Person2 17 { 18 public: 19 void showPerson2(void) 20 { 21 cout << "Person2 show!" << endl; 22 } 23 }; 24 25 template<class T> 26 class MyClass 27 { 28 public: 29 30 T obj; 31 32 //类模板中的成员函数 33 void func1(void) 34 { 35 obj.showPerson1(); 36 } 37 38 void func2(void) 39 { 40 obj.showPerson2(); 41 } 42 }; 43 44 void test_01(void) 45 { 46 MyClass<Person1>m; 47 m.func1(); 48 //m.func2();//报错,类模板成员函数func2中的showPerson2不是Person1的成员,所以类模板成员函数func2无法被创建 49 } 50 51 int main(void) 52 { 53 test_01(); 54 55 system("pause"); 56 return 0; 57 }