问一个关于父类成员函数继承类调用的问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:15:54
比如父类有一个成员函数比如就是GetParent() 他是CWND的一个成员函数 其他的对话筐类等等都是继承了CWND类的··但是GetParent它不是一个虚函数 也没有重载 比如在CDialog 中调用得到的就是CDialog 的父窗口的指针 在CPropertyPage中调用它就是指向一个CPropertyPage的一个父窗口 照理说他们都会调用父类的成员函数 得到父类的句柄啊 ID啊等等··但是不同的派生类调用就得到不同的派生类的句柄 ID 而父类的成员函数都没有被重载 也没有被设置成需函数为 这是为什么???能不能给我讲一下??
还有,既然GetParent()在CView类中调用得到的返回值是CWnd类型,但为什么说是返回值是CView的父窗口CMainFrame呢???,且还要用(CMainFrame*)GetParent()去转换呢!,我试验过,在CMainFrame类中调用GetParent()返回值为NULL(因为CMainFrame没有父窗口),但返回类型为CWnd,可以用GetParent()->(CWnd类的成员函数都可以用),这有什么意义呢???
谢谢楼上的回答,

类的某个实例对象,在内存中只记录的类的成员变量(可能还有虚函数指针)。而类的成员函数都放在别的地方,由IAT来路由其具体地址,任何一个类的实例调用其类的成员函数时,都默认传递一个this指针,指向当前实体。故成员函数被调用运行时,就根据this来确定当前对象。那么GetParent等函数就得到的是绝对正确的结果了。
这跟虚函数没关系
定义成员函数的时候,对this的使用也就是这个道理

GetParent() 返回的是你在Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL);
这个函数的这个参数pParentWnd

这个不是一两句说得明白的,建议去看看 C++ Primer 吧!

推荐这本书哦!