函数重载的问题 cwnd Cview

atlight 2008-07-28 05:36:32

MyDialog(CWnd* pParent = NULL); //(1)
MyDialog(CView* pView); //(2)

CChildView::CChildView()
{
pDlg = new MyDialog(this);
}

实在想不通,编译器居然调用第一个构造函数
后来强行指定类型才调用(2)构造函数

pDlg = new MyDialog((CView*) this);


我知道CView是派生于CWnd,但是this指针明明就是CView类型啊.
难道编译器更喜欢参数缺省吗?


...全文
116 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Conry 2008-07-28
  • 打赏
  • 举报
回复
看来楼主还要好好学习一下c++的基础知识
xkyx_cn 2008-07-28
  • 打赏
  • 举报
回复
CWnd是CView的基类,用基类指针CWnd*类型来传递CView*不正好实现多态吗,lz觉得有什么问题?
atlight 2008-07-28
  • 打赏
  • 举报
回复
MyDialog(CWnd* pParent = NULL); //(1)
这个东东是MFC 自已生成的啊. 我有什么办法....

MyDialog(CView* pView); //(2) 这个才是我想的
我要通过构造函数将view针指传给Dialog这样一来.非模态对话框才能给Dialog发消息


UpdateDate()
pView->SendMessage(WM_ENDDIALOG);
DestroyWindow( );


菜牛 2008-07-28
  • 打赏
  • 举报
回复
你这种定义本身就不合理。像你这样第二个构造函数根本不需要。
11000000 2008-07-28
  • 打赏
  • 举报
回复

重来没有这么细研究问题,学习。
shanying_0 2008-07-28
  • 打赏
  • 举报
回复
pDlg = new MyDialog(this);
相当于
pDlg = new MyDialog();

this指针可以不用写 this 指向的是当前对象本身。也就是CChildView的构造的对象
所以调用MyDialog(CWnd* pParent = NULL); //(1)
上边的构造函数有默认值.



pDlg = new MyDialog((CView*) this);
你相当于把this所指定的对象转换成了cview了。所以掉用MyDialog(CView* pView);
atlight 2008-07-28
  • 打赏
  • 举报
回复
//我做了一个实验.

class CWnd
{
public:
void printCWnd() { cout << "This is CWnd" << endl;}
};

class CView : public CWnd
{
public:
void printCView() {cout << "This is CView" << endl; }
};

class Dialog: public CWnd //Dialog重载两个构造函数
{
public:
Dialog(CWnd* pCWnd) { pCWnd->printCWnd(); } //构(1)
Dialog(CView* pCView) { pCView->printCView(); } //构(2)
};

class ChildView:public CView
{
public:
ChildView() { Dialog* pMyDlg = new Dialog(this); }
};

void main()
{
ChildView test;
system("PAUSE");
}

/*
运行结果:
This is CView
请按任意键继续. . .
说明程序还是调用了2号构造函数
可是在MFC里面为什么却不一样呢????





atlight 2008-07-28
  • 打赏
  • 举报
回复
6 楼说的我不明白.
这里好像没什么多态吧~

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧