1.介绍一下STL,详细说明STL如何实现vector。
答:STL 是 Standard Template Libary 的,翻译成中文叫做标准模版库.
它是是容器,算法和迭代器的集合.通过迭代器作为桥梁将容器和算法
联系起来.容器是用来存储数据的,算法是用来操作数据的.容器是模版化
的数据集和,算法是泛形化的数据操作.利用 STL 进行开发,可以减轻对于动态内存的操作,利于程序开发和维护.
vector 是一个动态的数组,它的连续性其实是一种假象.vector 动态的扩大容量的大小,是这样来实现的.首先来申请一个适合的存储空间,将原来的内容拷贝进新的存储空间,再把旧的空间释放掉.
2.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?
答: 指针和引用的区别:
(1) 引用必须初始化,指针无需.
(2) 引用经过编译器的优化不占用存储空间,
在 32 位机器下指针占4个字节.
(3) 引用和被引用的对象是同一个对象,
指针内存放的是指向对象的地址.
(4) 指针可以改变所指的对象,
引用一经初始化就不可改变.
(5) 引用利于理解,指针容易混淆.
传引用确实比传指针安全,就如上面(4)所言指针可以改变指向.如果我们为函数传入数组的首地址,而在函数内意外的修改了该首地址,可能会出现意向不到的后果.
我使用常量指针难道不行.这样是不行的,因为常量指针的指针的意识是
指针不可以改变指向,但是可以更改指针所指的内容.这样也可能带来意想不到的后果.
如果非要指针的话,你可以这样的定义 const int*const p = &a;
但是这样的可读性没有引用好,因此建议使用引用.
3.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么;
答: 参数的传递方式有传递地址和传递数值两种方式。
实现多态参数传递采用传递地址的方式。
第三问不是很清楚。
4.构造函数可否是虚函数,为什么?析构函数呢,可否是纯虚的呢?
答:构造函数不可是虚函数,因为在构造里面是需要明确的知道要构造什。
虚函数是不确定的,因此可能会带来意想不到的后果。
析构函数可以是纯虚的。虽然在语法上正确,但是在实际开发过程不应该这样声明,因为基类的纯虚函数不可以定义。因此如果类中有动态申请的空间,这样可能会造成内存泄漏。
5. 拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。
答: 深拷贝是将资源和指针全都拷贝,而浅拷贝仅仅拷贝指针。
如果拷贝拷贝构造函数是浅拷贝,程序可能造成对同一块内存删除两次的情况,这样程序会崩溃。还有一种情况如果,指针改变了
指向将造成内存泄漏。
临时对象的开销比局部对象要小,临时对象不可以做左值。
6. 基类的有1个虚函数,子类还需要申明为virtual吗?为什么。
答: 不需要。因为编译器会把它当作虚函数处理。
7. C++和C定义结构的分别是什么。
答: C 中只有数据,而且都是公有的。
C++ 中有数据也有函数,默认的是私有的。
阅读(688) | 评论(0) | 转发(0) |