清华同方的两个面试题,请高手相助!
1.delete[]arr和deletearr[x]之间的区别?
2.假如有一个函数有1000多个return语句,如果想在程序进入这个函数和退出这个函数时,都弹出一个对话框,如何用简便的方法实现这个功能?不能在每个return 之前都加一个弹出对话框的函数?
问题点数:30、回复次数:24Top
1 楼qfeng_zhao(鱼儿鱼儿满天飞)回复于 2005-09-21 12:28:48 得分 5
1。
char *arr = new [size];
delete [] arr; //用于数组
char *arr[10];
for(int i=0; i<10; i++){
arr[i] = new char;
for(int i=0; i<10; i++){
delete arr[i]; //用于单个元素
}
Top
2 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-09-21 12:32:10 得分 0
upTop
3 楼qfeng_zhao(鱼儿鱼儿满天飞)回复于 2005-09-21 12:32:40 得分 0
真够bt
修改下程序结构,return 都改为break好了
void fun()
{
//弹出对话框
for(int i=0; i<1; i++){
原来的程序;return 都改为break;
}
弹出对话框
}Top
4 楼xlsue(小林)回复于 2005-09-21 12:41:03 得分 10
写个类,在类的destructor弹出一个对话框。在函数里声明为局部对象。Top
5 楼yanhailiangyhl(编程浪子)回复于 2005-09-21 12:46:20 得分 0
to 天天向上:你的第一个问题我觉得有道理!
可是第2个,我觉得这样大的改动还不如每个return前加一句好!
比如原来的函数是好的!只是为测试,这样的大改动就不方便!
我也想到了在函数外部实现的方面即:
弹出对话框;
fun();//原来的函数
弹出对话框;
这样就是在原来函数外实现的!不是这个函数自己的功能;那天面试没有问清楚是不是必须在函数内实现!Top
6 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2005-09-21 12:50:54 得分 0
把return 都换成goto
跳到一个指定 点
在这个指定点处加一个对话框和return语句Top
7 楼yanhailiangyhl(编程浪子)回复于 2005-09-21 12:53:26 得分 0
to xlsue(加勒彼海盗):能不能写一下具体实现的伪代码?Top
8 楼xlsue(小林)回复于 2005-09-21 13:07:47 得分 0
编译器会在每个return 之前插入局部对象的destructor.即使是异常而导致stack unwinding,对象的destructor也会被调用。。。Top
9 楼yanhailiangyhl(编程浪子)回复于 2005-09-21 13:21:35 得分 0
to加勒比:我明白了!谢谢!我试试给你加分!Top
10 楼yanhailiangyhl(编程浪子)回复于 2005-09-21 13:31:52 得分 0
关于这两个问题,谁还有别的见解,都可以拿出来看看!有道理的都给分!Top
11 楼qybao(阿宝)回复于 2005-09-21 13:37:26 得分 0
其实第二题需要那么复杂吗?在调用函数前和调用函数后分别弹出对话框不就可以了吗?
Top
12 楼K()回复于 2005-09-21 13:55:01 得分 0
int msgn;
msgn=fun(...);
switch(msgn)
{
case ...:
break;
...
};Top
13 楼pappGG(天天向上)回复于 2005-09-21 14:16:37 得分 0
第二题:
假设函数返回值为int
#define MBOX_RETURN(msg,retvalue) AfxMessageBox(msg);return returnvalue
函数里用MBOX_RETURN("message",0)代替return 0Top
14 楼pappGG(天天向上)回复于 2005-09-21 14:17:25 得分 0
是
#define MBOX_RETURN(msg,retvalue) AfxMessageBox(msg);return retvalueTop
15 楼pappGG(天天向上)回复于 2005-09-21 14:21:10 得分 0
麻烦,还是用goto吧Top
16 楼xdop(鸿飞处)回复于 2005-09-21 14:54:54 得分 2
1、数组和元素,不说了
2、函数第一行加上弹出对话框语句,这个至少先对了一半吧
关键是退出时——
如果是Java,我就用
try{
{原来的函数体}
}catch{}
finally{
弹出对话框; // 总会被执行
}
C++也有类似的代码块吧Top
17 楼samelie(偶)回复于 2005-09-21 14:58:42 得分 0
goto 和break不好,这样没有原来的返回值。Top
18 楼sinall()回复于 2005-09-21 15:08:03 得分 0
2、
1)定义嵌套类
2)用局部类变量的构造和析构来做。Top
19 楼sinall()回复于 2005-09-21 15:09:34 得分 3
改正,^_^,没有试过,你可以自己试试。
2、
1)定义局部类
2)用局部类变量的构造和析构来做。
Top
20 楼SeaWave(NoSound)回复于 2005-09-21 15:11:13 得分 5
class XXX {
public:
~XXX() { MessageBox(...); }
};
...
...
void YYY(....) {
XXX x;
...
...
...
...
}Top
21 楼pappGG(天天向上)回复于 2005-09-21 15:45:47 得分 5
恩……想到一个更麻烦的
class ReturnException
{
public:
CString msg;
int iret;
};
int fun()
{
ReturnException e;
try
{
//...............
//需要返回的时候
e.iret = 0;
e.msg = "message";
throw e;
}
catch(ReturnException e)
{
AfxMessageBox(e.msg);
return e.iret;
}
}Top
22 楼yanhailiangyhl(编程浪子)回复于 2005-09-21 16:05:27 得分 0
谢谢各位!Top
23 楼ming6()回复于 2005-09-22 09:31:53 得分 0
这个最简单吧
c++用结构化异常可以做
MyFun()
{
__try{
}
__finally{
AfxMessageBox("quit");
}
}Top
24 楼ming6()回复于 2005-09-22 09:34:39 得分 0
MyFun()
{
__try{
...//所有的函数代码在这里
}
__finally{
AfxMessageBox("quit");
}
}
不管__try中如何退出
__finally都将被调用Top




