笔试题总结

1.死锁产生的四个必要条件:互斥,不可剥夺,部分分配,环路存在
 

2. 什么是引用?申明和使用引用要注意哪些问题?

答:引用就是某个目标变量的别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。

3.交换两个数,不用第三块儿内存:
int a = ……;
int b = ……;
a = a + b;
b = a - b;
a = a - b;

4.文件读写c

#include "stdio.h"
main()
{
        FILE 
*fp;
        
char ch,filename[10];
        scanf(
"%s",filename);
        
if((fp=fopen(filename,"w")==NULL)
        
{
printf(
"cann't open file\n");
exit(
0);
  }

  ch
=getchar();
  
while(ch!='#')
  
{
       fputc(ch,fp);
       putchar(ch);
       ch
=getchar();
  }

  fclose(fp);
}

5.#include <iostream.h>
class human
{
public:
human(){ human_num++;};
static int human_num;
~human()
{
human_num--;
print();
}
void print()
{
cout<<"human num is: "<<human_num<<endl;
}
private:
int human::human_num = 0;
};
human f1(human x)
{
x.print();
return x;
}
int main(int argc, char* argv[])
{
human h1;
h1.print();
human h2  = f1(h1);
h2.print();
return 0;
}
输出:
1
1
0
0
-1
-2
----------------------------
分析:
human h1;       //调用构造函数,---hum_num = 1;
h1.print();     //输出:"human is 1"
human h2  = f1(h1); //再调用f1(h1)的过程中,由于函数参数是按值传递对象,调用默认的复制构造函数,它并没有对hum_num++,所以hum_num 仍= 1,所以x.print()输出:"human is 1";   在推出f1函数时,要销毁X,调用析构函数(human_num--),输出:"human is 0"(,由于该函数返回一个human 对象,所以又调用默认构造函数,创建一个临时对象(human_num = 0;),把临时对象赋给h2,又调用默认构造函数(  human_num = 0);   h2.print();   //输出: human is 0;
//在退出main()函数是,先销毁h2,调用析构函数(human_num--),输出"human_num is -1" 然后销毁h1,调用析构函数(--),输出"human_num is -2"

6.比较const常量和#define常量
  首先,const常量有数据类型,编译时会有安全检查;#define常量只是字符替换,有可能出错.另外,有些集成化的工具可调试const常量.

7.不能在类中定义const常量,因为const常量表示在某个生命周期内值不变,不能表示永远不变.最好的方法是使用枚举类型.缺点:不表示数据类型,且不能表示浮点

8.


posted @ 2008-05-02 20:47  fishert  阅读(266)  评论(0编辑  收藏  举报