别人的C++面试

1,解释inheritance
...自己发挥,说些显示生活的中继承相关的东西会更形象生动。
2,空类编译器自动添加了哪些函数
应该产生默认构造函数、析构函数、拷贝构造函数、赋值操作符函数。
3,类型转换有哪些,分个解释
static_cast:普通转换
const_cast:将const转换成非const
dynamic_cast:将父类指针或引用转化为子类指针或引用,如果指针或引用指向的确为待转化子类,则成功转化,否则抛出异常(引用情况)或返回0(指针情况)。
reinterpret_cast:通常为操作数的位模式提供较低层次的重新解释。就是当前内存解释为某种类型对象。
4,delete this会怎么样?
如果对象是new来的,那么delete应该没关系,但是后来不能再用delete pt;如果对象是在栈中申请的,则很危险,要根据编译器不同有不同情况出现。
5,什么时候用到拷贝构造函数
初始化时,即对象未构建时使用。例如:className A(B)或className A=B;B为className类型对象。
6,拷贝构造函数为什么不用值传递
值 传递时,参数有一个初始化问题,如className( className a );调用时,要将实参赋给形参,如调用className A(B),函数先调用className a (B)需要用到拷贝构造函数,形成无限递归。即使可以,如果类很大的话,效率也是很低下的。
7,static关键字的问题,static members,static function意思。可否从object调用static function?
类的静态成员和静态函数,静态成员即为类共有的成员变量。静态函数不含this指针参数。
当然可以。
8,stl,什么时候用list,什么时候用vector,两者的区别是什么。
list即链表,如果经常插入、删除元素,则用它,
vector即数组,如果经常随机访问元素,则用它,
区别:连续存储和非连续存储,其实区别很多,可以参看数组和链表数据结构的特点。
如果既要插入又要查找,则先用list建立数据集,在将list拷贝给vector。
9,解释override,定义为override的函数需要什么条件
就是重写,首先父类的相应函数要有virtual关键字修饰,用父指针调用该函数时,根据指针实际指向对象类型调用其定义的函数,如果其没有重定义函数,则调用其父类的。
10,virtual destructor的作用,为什么要virtual
一般析构函数都要用virtual,这样析构的时候可以调用指针所指向对象(可能为子类对象)的定义的析构函数,避免一些操作未做,或资源未释放。

你可能感兴趣的:(别人的C++面试)