网上收集的c/c++的笔试题,将部分整理成节,上传后大家方便。不是很全,但是可以作为笔试的参考吧。
误。但派生类指针通过强制转换可指向基类对象。可是该动作很危险:若引用对象中不村在的派生类成员,会得到错误的结果。 18. malloc/free是c/C++语言的标准库函数;new/delete是c++的运算符,都可以用申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建是要自动执行Constructor函数,对象在消亡之前要自动执行Destructor函数。由于malloc/free是库函数不是运算符,不在编译器控制权限之内,不能够把Constructor及Destructor任务加于malloc/free. 7
1 ) main() {
int a=3;
printf(“%d\n”,(a=4*5,a*2)); }
a=4*5—结果a为20
(a=4*5,a*2)—结果为a*2,即40 所以,结果是40 2 ) main() {
printf(“Hello world !\n”); int a = 6;
printf(“—–%d\n”,a=(2*44,a*3)); system(“pause”); }
a输出为18; 3 ) main() {
printf(“Hello world !\n”); int a;
printf(“—–%d\n”,a=(2*44,a*34,a*33,a*3));
system(“pause”); }
8. 为什么析构函数要声明成virtual 对象构造的顺序是先基类,再派生类. 析构的顺序是先派生类,再基类.
如果基类没有虚函数,则不存在多态,在用基类指针/引用绑定到一个派生类对象时,该对象就被当成了基类对象,也就是对象被截断了.
所以delete基类指针时,直接调用基类析构函数,从而派生类对象没有得到释放.
为了保证在继承关系中保证派生类可以正确的释放,所以通常把可能要被继承的类的析构函数写成虚拟函数(每个类都会有析构函数).除非你保证该类不会被继承.
而如果有其他成员函数已经是虚拟函数了,那么析构函数是否虚拟都无关紧要了. 9. c++函数调用前必须声明吗
无论C还是C++,在函数调用之前如果函数没有定义,都要先声明!
可能有的编译器有所谓隐式声明的語法。就是默认地认为那个函数的参数就是你传的参数,并且函数返回 int。不过无论如何,显式声明都是个好习惯,不仅编译器不用揣测函数类型,而且看的人也能看的清楚些。
某公司C/C++笔试
1. C中static有什么作用?
(1)隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。
(2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量。
(3)static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0×00,某些时候这一特点可以减少程序员的工作量。
2.C++中const有什么用?不要一听到const就说是常量,这样给考官一种在和一个外行交谈的感觉。应该说const修饰的内容不可改变就行了, 定义常量只是一种使用方式而已,还有const数据成员,const参数, const返回值, const成员函数等,