名词解释
构造函数:
1.构造函数命名和类名完全相同;
2.有默认构造函数(重载时C++必须有手动写默认构造函数);
3.构造函数不能被直接调用(显式调用),必须通过new运算符在创建对象时调用;
4.没有返回值;
Java,普通函数和构造函数可以同名,但普通函数得有返回值。
----------------------------------------------------------
析构函数:(c++)
1.与类名相同,函数名前加位取反符~;
2.不带任何参数,没有返回值;
3.一个类只能有一个析构函数;
Java和C#有自动回收机制
----------------------------------------------------------
继承:
C++:有单继承和多继承;三种继承方式:public, private, protected;
单继承:class Test : public T1 {};
多继承:class Test : public T1, private T2 {};
对于继承class类默认采用private继承,对于struct默认采用public继承,如:
class Test1{}
struct Test2{}
class Test : Test1, Test2 {}; 等价与 class Test : private TEst1, public Test2 {};
public继承:基类的public成员和protected成员作为派生类的成员时,他们都保持原有的状态,private成员依然是私有的,不能被派生类的子类访问;
private继承:基类的public成员和protected成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问;
protected继承:基类的public成员和protected成员都作为派生类的保护成员,并且只能被他的派生类成员函数或友元访问;
Java和C#:只有单继承,但可以实现多接口
----------------------------------------------------------
接口:
C++:没有接口的概念,可以用纯虚函数实现接口;
C#:不能有new, public, protected, internal, private, static, abstract, override, vritual 等修饰符,默认为public;(Java默认是public abstract)
只能声明抽象成员,不能实例化;
只能包含方法、事件、索引等;
只能对接口声明;
----------------------------------------------------------
虚函数:
Java,所有的方法默认为都是虚函数,只有标记为final的方法才是非虚函数。
C#,对于基类中的任何虚方法必须用virtual修饰,而派生类中由基类继承而来的重载方法必须用override修饰。
C++,基类必须指出希望派生类重写的哪些函数,定义为virtual的函数是基类期待派生类重写,派生类不用override修饰。基类希望派生类继承的函数不能定义为虚函数。
纯虚函数:
----------------------------------------------------------
抽象类:
C++:含有虚函数的类是抽象类,不能生成对象;
Java:类用abstract修饰的类是抽象类,不能生成对象。
----------------------------------------------------------
多态:
实现多态的方法有:虚函数,抽象类,重载,复写,模板。
----------------------------------------------------------
引用:
是某一变量的别名,对引用的操作和对变量直接操作一样。声明方法: 类型标识符 &引用名 = 目标变量名; int &a = b;
1. &起标识作用,不是求地址运算符
2. 类型标识符是目标变量的类型
3. 声明引用时必须同时对其进行初始化
4. 声明一个引用,不是定义了一个变量,只是一个目标变量的别名,因此引用本身不占用储存单元,系统也不会为其分配,对引用求地址也就是对目标变量求地址
5. 不能有数组引用,无法建立一个数组的别名,引用只能针对某个元素,而不是若干个元素的集合
深拷贝/浅拷贝:
1. 没有显示声明拷贝构造函数,编译器会自动生成一个默认的,默认的是浅拷贝
2. 浅拷贝:不分配新的内存单元,指向同一内存单元,如果原变量的指向的内存单元被析构,那么拷贝的会成为一个野指针,运行会出错误,比如说变量的赋值:int a = b;
深拷贝:发生复制的时候,会重新分配内存单元,生成新的内存地址,比如说new: int* a = new int(5);
----------------------------------------------------------
内联函数:
泛型:
重构:
迭代:
序列化:
反序列化: