深入类的初始化和方法重载
作者:网络转载 发布时间:[ 2012/11/27 10:00:49 ] 推荐标签:
类为什么要初始化,这要追溯到程序员经常不太注意的一个问题,是忘记初始化变量,尤其是C程序员。常常会因为某个变量未被初始化而引发不可预知的错误。
当然,C语言中不涉及到类的概念,但是,在C++和Java中,引入了构造器这种概念来解决这个问题。构造器是用来做初始化的工作的,如果程序员忘记在建类的时候加上构造器,则编译器会自动创建构造器。为了调用 方便,采用与类名相同的名称来定义默认构造器的名称。有了默认构造器,保证了我们在调用方法之前,它已经被初始化了。
在实际的开发中,为了让程序员按自己的需求来创建类的实例对象,采用重载构造方法,来定制不同的实例对象。程序员可以根据实际情况,创建不同的构造器,这样,在使用类之前,可以用不同的参数来新建对象,在这里,用到了刚刚提到的方法重载功能。
方法重载:通俗来讲是,在同一个类中,两个方法名称相同,参数不同(此处参数的不同,包括参数的个数不同,或者是参数的类型不同,甚至是参数的顺序不同)。此处有一个容易让人产生幻觉的地方,是,是不是可以以两个方法的返回值不同来区分方法重载?不可否认,我以前也这样怀疑过,找了资料,大家说什么的都有,后来,自己亲自做了实验,写了一小段代码测试出来了,结果是:不可以,返回值的不同是不能用来区分方法重载的。因为从理论上讲,我们设想一下,实际情况中,总是方法调用在前,返回值在后,如果有两个方法,只有返回值不同,那么编译器在调用它们的时候,是看不出它们有什么不同的(只有在方法执行完后才知道),因此只能把它们当做是相同的方法,因此肯定是通不过的。所以说,实验很重要,建议大家在写程序的时候,如果遇到模棱两个的东西,一定要动手做实验,这样才能获得正确的知识。
方法覆写:与方法重载来做区分的另一个技术是方法覆写,覆写是指,在两个类中(一般是指继承过程中的基类和派生类),方法名相同,参数也相同的两个类(注意区分和重载不同的地方)。这样多数用在继承中,父类通过提供接口,子类覆写这个接口,用来实现不同的功能,也是C++里面多态的实现原理,当然多态的内部细节比较复杂。
方法隐藏:是与方法覆写来区分的,还是两个类,如果方法名相同,参数相同,且基类无virtual关键字,实现了方法隐藏,派生类屏蔽了基类的函数
总结一下:
Java中:
重载:是在同一个类中,两个方法名称相同,参数不同
覆写是:在两个类中,方法名相同,参数也相同的两个类
C++中:
重载:是在同一个类中,两个方法名称相同,参数不同
覆写是:在两个类中,方法名相同,参数也相同的两个类,且基类函数必须有virtual关键字,若无virtual关键字,则为隐藏。
隐藏是指:如果方法名相同,参数不同,不论基类有无virtual关键字,后都实现了方法隐藏。
(如果派生类的函数与基类的函数同名,但是参数不同。此时,若基类无virtual关键字,则肯定是隐藏。但是如果派生类的函数与基类的函数同名,但是参数不同。此时,若基类有virtual关键字,基类的函数将被隐式继承到派生类的vtable中。此时派生类vtable中的函数指向基类版本的函数地址。同时这个新的函数版本添加到派生类中,作为派生类的重载版本。但在基类指针实现多态调用函数方法时,这个新的派生类函数版本将会被隐藏)
如果方法名相同,参数相同,且基类无virtual关键字,实现了方法隐藏。
貌似很复杂,我们一定要理清啊!
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11