前段时间自己写了一个简单的List模板类,List类中有两个嵌套类,分别是const_iterator和iterator,其中后者是前者的子类。在重载List类的=操作符的时候,出现了一个编译上的问题,现在我把部分代码贴上来。
在154行的时候,编译器提示等号两边的类型不匹配,原因是我原来的代码是:iterator itr=rhs.begin()。在重载begin()函数的时候,编译器会自动为函数加入this指针参数,this指针也会成为匹配的条件之一。这个时候const函数加入的是const指针,非const函数加入的是普通指针。 所以160行和164行的两个begin()函数,也算是函数的重载。
rhs是一个const的引用,调用的是const函数begin,返回的是const_iterator类型的,由于const_iterator是父类,自然不能赋值给子类类型。
PS. 复习一下函数重载(overload function) 的概念:出现在相同作用域的两个函数,如果函数名称相同但是形参表不同,成为函数的重载。
函数的重载和重复声明的区别:如果两个函数的返回类型好行参表完全匹配,则将第二个函数声明视为第一个函数 的重复声明。如果两个函数行参表完全相同,但是返回类型不同,则第二个函数的声明是错误的。