c++面试总结知识点1
1、什么是虚函数?什么是纯虚函数?
答:虚函数声明如下: virtual ReturnType FunctionName(Parameter);引入虚函数是为了动态绑定。
纯虚函数声明如下:virtual ReturnType FunctionName()= 0;引入纯虚函数是为了派生接口。
在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载。
2、基类为什么需要虚析构函数?
一般来说,如果一个类要被另外一个类继承,而且用其指针指向其子类对象时,如A* d = new B();(假定A是基类,B是从A继承而来的派生类),那么其(A类)析构函数必须是虚的,否则在delete d时,B类的析构函数将不会被调用,因而会产生内存泄漏和异常;
在构造一个类的对象时,先构造其基类子对象,即调用其基类的构造函数,然后调用本类的构造函数;销毁对象时,先调用本类的析构函数,然后再调用其基类的构造函数;3、当i是一个整数的时候++i和i++那个更快一点?i++和++i的区别是什么?
答:理论上++i更快,实际与编译器优化有关,通常几乎无差别。
i++实现的代码为:
//i++实现代码为: int operator++(int) { int temp = *this; ++*this; return temp; 7ff7 }//返回一个int型的对象本身
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
++i的实现代码:
// ++i实现代码为: int& operator++() { *this += 1; return *this; }//返回一个int型的对象引用
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- i++和++i的考点比较多,简单来说,就是i++返回的是i的值,而++i返回的是i+1的值。也就是++i是一个确定的值,是一个可修改的左值,如下使用:
cout << ++(++(++i)) << endl; cout << ++ ++i << endl;
- 1
- 2
- 1
- 2
可以不停的嵌套++i。
这里有很多的经典笔试题,一起来观摩下:
int main() { int i = 1; printf("%d,%d\n", ++i, ++i); //3,3 printf("%d,%d\n", ++i, i++); //5,3 printf("%d,%d\n", i++, i++); //6,5 printf("%d,%d\n", i++, ++i); //8,9 system("pause"); return 0; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
首先是函数的入栈顺序从右向左入栈的,计算顺序也是从右往左计算的,不过都是计算完以后在进行的压栈操作:
对于第5行代码,首先执行++i,返回值是i,这时i的值是2,再次执行++i,返回值是i,得到i=3,将i压入栈中,此时i为3,也就是压入3,3;
对于第6行代码,首先执行i++,返回值是原来的i,也就是3,再执行++i,返回值是i,依次将3,5压入栈中得到输出结果
对于第7行代码,首先执行i++,返回值是5,再执行i++返回值是6,依次将5,6压入栈中得到输出结果
对于第8行代码,首先执行++i,返回i,此时i为8,再执行i++,返回值是8,此时i为9,依次将i,8也就是9,8压入栈中,得到输出结果。
上面的分析也是基于vs搞的,不过准确来说函数多个参数的计算顺序是未定义的(the order of evaluation of function arguments are undefined)。笔试题目的运行结果随不同的编译器而异。
- 最近看的一些关于数据结构和C++的面试知识点总结
- C++笔试面试真题回顾与知识点总结
- C++及数据结构笔试面试常见知识点总结
- C++ 面试知识点总结
- C/C++面试知识点总结(二)
- C-C++面试知识点总结(三)
- C++及数据结构笔试面试常见知识点总结
- C++ 多态的实现原理面试知识点总结
- 面试知识点总结之c++基础(一)
- C++面试题知识点总结
- C/C++面试知识点总结(一)
- 面试知识点总结之c++基础(二)
- C++面试知识点总结
- C++面试知识点总结
- C/C++面试知识点总结
- C++ 面试知识点总结
- HTTP知识点总结(面试必看)
- C/C++校招笔试面试经典题目总结三
- C++笔试面试常考知识点汇总(一)
- vue面试知识点总结