引言:
众所周知,c++中提供了函数重载这一概念,当然还有覆盖,虚函数这些更加复杂的概念,这里我们不再过多的进行赘述.我们这里就是只是谈谈怎么通过我们自己的操作来实现通过函数的返回值实现函数的重载
这里我们还是引入hash表中的insert函数
从这里我们可以看出,为什么同样的函数,但是实现了函数的重载,c++标准中明确的规定我们的函数的重载的规则
那我们怎么在不改变规则本身的前提上实现通过返回值实现函数的重载
这里我们需要明白一个概念,c++中实现函数重载的原理是,编译器在调用同名函数的过程中会通过参数列表,函数的类型(const static)进行决策,这一决策决定了我们调用哪一个函数,所以在决策这一个层面我们并不能改变,所以我们只能从返回值这个层面来进行改变,那么我们怎么处理返回值呢?
我们总不能返回多个值吧?但是我们可以把我们想要返回的值(一般存指针或者引用)存在一个类中,然后我们返回这个类,但是我们还是没有解决这个重载问题,相反,最后得不偿失.但是,当我们走到了这一步,我们明确了返回一个类是可能得方式.这里离我们最终的方式已经只差一步了.
c++中的operator这个设计帮助我们可以非常灵活的控制操作符,那么假如我们这个将这个返回的类进行重载不就解决了吗
struct poly{
poly(bool s1,int s2):_s1(s1),_s2(s2){}
operator bool(){ return _s1; }
operator int() { return _s2; }
bool _s1;
int _s2;
}
poly func(){
int s1 = 0;
bool s2 = true;
return poly(s2,s1);
}//这样不就实现了函数的重载了
int ret = func();
bool flag = func();
总结
这种方式还是非常的巧妙,所以说,c++的没有上限,加油挖掘吧.