

然后我们再来看类模板中成员函数的创建时机是什么时候
可以看到,普通类中的成员函数一开始就可以创建了,
类模板中的成员函数在调用时才创建.


我们写个例子看看,可以看到我们写了一个Person1类,然后
里面有个showPerson1方法
然后里面只有一个输出语句


然后我们再去写一个Person2这类,然后
也写一个showPerson2这个方法.


然后我们再去写一个类模板
MyClass 然后,里面只有一个属性 T obj


然后我们再去写两个成成员函数,在这个类模板中,可以看到,我们直接写了一个
func1,一个func2,然后在func1,中调用了
obj.showPerson1()方法,在func2中调用了obj.showPerson2()方法



可以看到上面我们给类模板中定义了,两个成员函数然后编译,可以看到编译成功了
说明什么,没报错,就不会去创建对应的T的对象.所以不报错.也就是说
T这个类模板,没有被调用,所以没报错对吧,因为我们现在看的话,T都不知道是什么
如果编译阶段他就去调用执行的话,肯定是报错的,没报错,就说明他没有执行.


然后我们去写一个test01方法
然后里面去,声明一个类模板MyClass的对象,可以看到,这个类模板中参数对象是Person1
然后我们用m去调用m.func1,和m.func2这两个函数,可以知道
调用m.func2,肯定会报错,因为我们传入的Person1这个类,根本没有func2这个函数对吧.


可以看到执行的时候也确实是报错了,是因为m.func2,调用showPerson2的时候,报错的


可以看到我们类模板中,有个func2函数,调用了
obj.showPerson2的函数对吧


我们删除了m.func2以后,然后我们再编译
看一看的没问题了对吧


然后我们执行看结果,没问题对吧去看看
也显示出来了Person1 show的,Person1中打印出来的内容


然后我们再去把Person2,替换到MyClass类模板中
然后这里我们如果调用m.func1的话,编译会报错的


可以看到报错了,因为我们Person2类中,是有showPerson2函数的
没有showPerson1函数对吧,而这里m.func1,调用的是showPerson1,所以就报错了.


这里我们改成m.func2这样我们再去执行


可以看到就不报错了对吧


所以,类模板中的成员函数并不是一开始就创建的,而是在调用的时候,才去创建的.