1、模板函数和强制类型转换问题
- 模板函数的定义:
template<class T>
T fun(T x,T y)
{
return x*x + y*y;
}
- 对于模板函数的调用,类型需要一致
fun(1, 2) 对
fun(1.0, 2) 错
fun<float>(1,2.0) 对(为强制类型转换,后面的实参会强制转换成为float类型,因此类型也是一致的)
2、定义数组时,元素个数参数的表达问题
一维数组的定义方法: 元素类型 数组名[E];
其中E只能是整型常量表达式。
例如: int a[2];
但是这样就不可以:int x=2, y=3; int a[x+y]; 错误的定义
这样就对了:const int x=2, const int y=3; int a[x+y]; 正确的定义
3、 多态(静态绑定和动态绑定)
- 面向对象有三种特性:封装,继承,多态。其中多态性有两种:
1)一种是依靠函数重载实现的静态绑定;
2)一种是依靠虚函数实现的动态绑定,动态绑定跟对象的引用类型无关,他会根据具体的对象调用对 应的方法。
- 什么是静态绑定和动态绑定,他们有什么区别?
定义
静态类型:对象在声明时采用的类型,在编译期既已确定;
动态类型:通常是指一个指针或引用目前所指对象的类型,是在运行期决定的;
静态绑定:绑定的是静态类型,所对应的函数或属性依赖于对象的静态类型,发生在编译期;
动态绑定:绑定的是动态类型,所对应的函数或属性依赖于对象的动态类型,发生在运行期;
区别
1)静态绑定发生在编译期,动态绑定发生在运行期;
2)对象的动态绑定类型可以更改,但是静态绑定类型无法更改;
3)要想实现动态,必须使用动态绑定;
4)在继承体系中只有虚函数使用的是动态绑定,其他的全是静态绑定。