您的位置:首页 > 编程语言 > C语言/C++

读孙鑫《VC++深入详解》随笔

2011-07-15 10:56 204 查看
【1】(page38)

重载构成的条件:函数的参数类型、参数个数不同。分析以下2种情况:

第一种:1、void output();2、int output();

第二种:1、void output(int a,int b=5);2、void output(int a);

对于第一种情况,只有函数的返回类型不同是不能构成重载的。对于第二种情况,当我们在程序中调用output(5)时,应该调用哪个函数呢?调用1当然是可以的。因为1的函数第二个参数有一个默认值。当然也可以调用第二个函数。有与调用有歧义,因此这种情况不能构成重载函数。

在函数重载时,要特别注意函数带有默认参数的情况。

【2】(Page226)
创建非模态对话框:

CTestDlg dlg;
dlg.Create(IDD_DIALOG1,this);
dlg.ShowWindow(SW_SHOW);
发现对话框并不出现。因为创建的非模态对话框对象dlg是一个局部对象,当OnDialog函数执行完毕时,dlg的生命周期也结束。那为什么模态对话框可以使用局部对象呢?因为在创建模态对话框时,程序执行到DoModal函数以显示对话框时,程序会暂停执行,直到对话框关闭。因此,在创建非模态对话框时,不能把对话框声明为局部对象。对于这个问题,有2种解决方案:一是把对话框对象定义为视类的成员变量;二是将它定义为指针,在堆上分配内存。在堆上分配内存,与程序的整个生命周期是一致的。后一种方式的代码:

CTestDlg *pDlg=new CTestDlg;
pDlg->Create(IDD_DIALOG1,this);
pDlg->ShowWindow(SW_SHOW);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: