重载函数

初级C++2类与对象

蓝咒 提交于 2019-12-01 12:12:21
对象 object |--属性 attribute |--行为 behaviour 调用对象中的函数就是向该对象传送一个消息 message 封装性 encapsulation |--一是将有关数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰 |--二是将对象中某些部分对外隐藏,即隐藏其内部细节,只留下少量接口,以便与外界联系,接受外界的消息,即信息隐藏 information hiding 抽象 abstraction 抽象的作用是表示同一类事物的本质。 类 继承与重用 软件重用 software reusability 多态性 polymorphism 面向过程:程序 = 数据结构 + 算法 面向对象:程序 = 对象s + 消息 ————————————————————————————————————— 类class 类是对象的抽象,对象是类的具体实例(instance) 类头 class head 类体 class body 成员列表 class member list 类中成员默认是private struct成员默认是public class 类名 { private: 私有数据和成员函数 public: 公用数据和成员函数 }; 成员访问限定符 member access specifier |--私有的 private

JAVA基础(补)重写与重载

*爱你&永不变心* 提交于 2019-12-01 11:55:15
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。 在面向对象原则里,重写意味着可以重写任何现有方法 方法的重写规则 参数列表必须完全与被重写方法的相同。 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。 父类的成员方法只能被它的子类重写。 声明为 final 的方法不能被重写。 声明为 static 的方法不能被重写,但是能够被再次声明。 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。

一)Java基础知识

喜欢而已 提交于 2019-12-01 09:53:50
1)面向对象的特性有哪些? 答:封装、继承和多态。 2)Java 中覆盖(Override)和重载(Overload)是什么意思? 答:覆盖是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访问权限不能比父类的小;被覆盖的方法不能是 private 的,否则只是在子类中重新定义了一个方法。   重载表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同。 问: 那么构成重载的条件有哪些? 答:参数类型不同、参数个数不同、参数顺序不同。 问: 函数的返回值不同可以构成重载吗?为什么? 答:不可以,因为 Java 中调用函数并不需要强制赋值。 3)抽象类和接口的区别有哪些? 抽象类中可以没有抽象方法;接口中的方法必须是抽象方法; 抽象类中可以有普通的成员变量;接口中的变量必须是 static final 类型的,必须被初始化 , 接口中只有常量,没有变量。 抽象类只能单继承,接口可以继承多个父接口; Java8 中接口中会有 default 方法,即方法可以被实现。 来源: https://www.cnblogs.com/sketeton/p/11676951.html

重载(overload)和重写(override)的区别

自作多情 提交于 2019-12-01 07:47:28
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载; 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原)。重载对返回类型没有特殊的要求。 方法重载的规则: 1.方法名一致,参数列表中参数的顺序,类型,个数不同。 2.重载与方法的返回值无关,存在于父类和子类,同类中。 3.可以抛出不同的异常,可以有不同修饰符。 方法重写的规则: 1.参数列表必须完全与被重写方法的一致,返回类型必须完全与被重写方法的返回类型一致。 2.构造方法不能被重写,声明为 final 的方法不能被重写,声明为 static 的方法不能被重写,但是能够被再次声明。 3.访问权限不能比父类中被重写的方法的访问权限更低。 4.重写的方法能够抛出任何非强制异常(UncheckedException,也叫非运行时异常),无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。 1. 为什么函数不能根据返回类型来区分重载? 调用时不能指定类型信息,编译器不知道你要调用哪个函数。 例如: 1

重写与重载的区别

醉酒当歌 提交于 2019-12-01 07:22:28
1.重写(Override) 从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。 例如: public class Father { public static void main(String[] args) { // TODO Auto-generated method stub Son s = new Son(); s.sayHello(); } public void sayHello() { System.out.println("Hello"); } } class Son extends Father{ @Override public void sayHello() { // TODO Auto-generated method stub System.out.println("hello by "); } } 重写 总结: 1.发生在父类与子类之间 2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同 3

浅谈Java多态

孤人 提交于 2019-12-01 07:18:47
多态 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。 多态存在的三个必要条件 继承 重写 父类引用指向子类对象(引用还是指向父类) 比如 Parent p = new Child(); ​ 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误; 如果有,再去调用子类的同名方法。 重载(Overload)与重写(Override) 多态中重写的基本规则 参数必须要一样,且返回类型必须兼容 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。 即外壳不变,核心重写! 父类定义出其他的程序代码要如何使用方法。不管父类使用了哪种参数,覆盖此方法的子类也一定要使用相同的参数。同样,不论父类声明的返回类型是什么,子类必须要声明返回一样的类型或该类型的子类。要记得, 子类对象必须保证可以执行父类的一切。 不能降低方法存取的极限 简而言之,方法和变量的存取权必须相同或者更为开放。 例如不能把public的方法降低为private。 父类的成员方法只能被它的子类重写。 声明为 final 的方法不能被重写。 声明为 static 的方法不能被重写,但是能够被再次声明。 构造方法不能被重写。 如果不能继承一个方法,那么它一定不能被重写 当需要在子类中调用父类的被重写方法时,要使用 super

SGI-STL简记(八)-哈希关联容器(hash、hash_set、hash_map、hash_multiset、hash_multimap)

て烟熏妆下的殇ゞ 提交于 2019-12-01 02:04:48
stl_hash_fun.h : hash:模板函数对象类类型,一般作为hash_set、hash_map、hash_multiset、hash_multimap容器的默认哈希函数,目前提供了多个特化版本,并重载实现operator(),参数类型有char、unsigned char、char*、int等 内置可转化为整型的数据类型的版本;除const char*和char*使用了__stl_hash_string计算哈希值,其余的则直接返回参数value值作为哈希值;哈希值返回值类型为size_t; __stl_hash_string:遍历各个字符串元素,累积遍历计算哈希值,计算方式为h=0;h=5*h+*s,*s为遍历字符串相应元素,h即为最后的哈希值,类型为unsigned long; 对于其他的hash模板实例实现,如basic_string<_CharT,_Traits,_Alloc>、crope、wrope或者是用户自定义的hash模板函数对象实现; stl_hashtable.h : _Hashtable_node:哈希表节点模板类; 数据成员: _M_next:指向下一个哈希表节点的指针; _M_val:保存当前哈希表节点的值(哈希值); _Hashtable_iterator/_Hashtable_const_iterator:哈希表迭代器模板类,模板参数_Val

SGI-STL简记(六)-序列容器(deque)

元气小坏坏 提交于 2019-12-01 02:03:58
stl_deque.h : deque:一种具有双端插入和删除,可随机访问元素的容器,从首部或后插入或删除在常量时间内完成,从中间则需线性时间内完成; __deque_buf_size:获取队列节点缓冲区大小(工具函数),当数据元素类型字节size小于512时则为512/size,否则为1,(意味着节点容器上限为512字节或者是一个自定义类型元素大小的字节); _Deque_iterator:专用于deque容器的迭代器模板类;重声明常规类型以及迭代器类型和常量迭代器类型,迭代器分类为random_access_iterator_tag;此外声明了一个_Map_pointer指向数据元素的指针的指针; 数据成员: _M_cur:指向当前node节点容器元素的当前指针; _M_first:指向当前的node节点容器第一个元素的指针; _M_last:指向当前的node节点容器最后一个元素尾部的指针; _M_node:指向node节点容器指针的指针(其值为对应的map缓冲区的槽, 而槽的值即为对应node节点缓冲区首地址); 成员函数: _S_buffer_size:静态函数,获取当前元素类型下的节点容器缓冲区大小(内部调用__deque_buf_size),如int时,则获得大小为512/4(即128个元素); 无参构造函数初始化所有成员为空,带参构造函数T*x, _Map

SGI-STL简记(六)-序列容器(list)

女生的网名这么多〃 提交于 2019-12-01 02:03:50
stl_list.h : list:一个可从任意位置快速插入和删除元素的双向链表,可在常数时间内完成,但是取数据、查找等则需要线性时间; _List_node_base:链表节点基类struct,仅包含_M_next、_M_prev成员,其分别为指向当前节点基类类型的下一个、上一个节点的指针; _List_node:节点模板类,继承于_List_node_base,只是增加了一个数据成员_M_data,用以保存实际的node节点数据; _List_iterator_base:链表迭代器基类,所属迭代器类型为bidirectional_iterator_tag; 内部成员_M_node为当前迭代器指向的节点; _List_node_base构造函数参数类型_List_node_base,该值以初始化_M_node; _M_incr:调整当前迭代器所指的节点为该节点的下一个节点; _M_decr:调整当前迭代器所指的节点为该节点的上一个节点; 此外重载的operator==,operator!=比较操作符,其实际上是直接比较迭代器的_M_node成员(地址); _List_iterator:链表迭代器模板类,继承于_List_iterator_base; 该模板类重声明了多个常规类型;多个重载版本的构造函数以初始化迭代器; 此外重载了解引用、取指针操作符(返回为当前迭代器_M_node

SGI-STL简记(六)-序列容器(slist)

百般思念 提交于 2019-12-01 02:03:39
stl_slist.h : slist:单链表模板容器,; _Slist_node_base:单链表基类,只一个指向_Slist_node_base类型的_M_next成员指针,以表示指向下一个node节点; 一些辅助工具函数: __slist_make_link:在指定节点prev_node后插入new_node节点,以加入构成链表; __slist_previous:找到指定节点的前一个节点(需要从节点head开始遍历查找节点链表); __slist_splice_after:节点后拼接函数,两个重载版本; 一种是将__before_first节点以后的节点至__before_last节点(含)拼接插入到pos指定的节点链表后的链表中; 另一种是将给予一个__head链表头,将整个链表拼接插入到指定pos节点链表后的链表中;__slist_previous(head,0)表示获取尾节点; __slist_reverse:链表节点翻转;需要知道3个连续的节点标识便可实现翻转,然后依次遍历整个链表节点; __slist_size:遍历链表统计链表长度; _Slist_node:单链表节点模板类,继承于_Slist_node_base,只是增加了数据成员_M_data; _Slist_iterator_base:单链表迭代器基类;只是重声明了size_type、difference