2.常见问题
2.1数组名和指针的区别
指针是一个变量,有自己对应的存储空间,而数组名仅仅是一个符号,不是
变量,因为没有自己对应的存储空间
1.地址相同,大小不同
intarr[10];
int*p=arr;
cout<<arr<<endl;
cout<<p<<endl;
cout<<sizeof(arr)<<endl;//结果为40
cout<<sizeof(p)<<endl;//结果为4
1.都可以用指针作为形参
2.指针可以自加,数组名不可以
3.作为参数的数组名的大小和指针的大小相同
2.2指针和引用的区别
1.引用必须被初始化,但是不分配存储空间,引用不占内存!指针不必在
声明的时候初始化,在初始化的时候需要分配存储空间
2.引用初始化后不能被改变,指针可以改变所指的对象
3.不存在指向空值的引用,但是存在指向空值的指针
2.3构造函数能否为虚函数
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结
果。在运行时,
可
以
通过
指
向
基
类
的
指
针
,来调用实现派生类中的方法
构造函数不能是虚函数:
虚函数主要是为了提供对多态的支持,也就是当处理一个对象,其动态类
型和静态类型(编译时确定)不同时,可以提供对象的合适实际类型,而不是对
象的静态类型。对于构造函数来讲,当创建一个对象时,静态类型和实际目标类
型始终是一致的。
1.虚函数对应一个vtable,这个vtable存储在对象的内存空间。如果构造
函数是虚的,就要通过vtable来调用,可是对象还没有实例化,也就是内
存空间还没有,怎么找vtable呢?所以不能是虚函数