| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1059 人关注过本帖
标题:类的相关问题
取消只看楼主 加入收藏
BlueMouse
Rank: 1
来 自:贵州
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-6
收藏
 问题点数:0 回复次数:6 
类的相关问题
class GUIBASE
{
    public:
        HWND    hWnd;

        virtual void onLoad(void){};
        virtual void onUnload(void){};
        virtual void onClick(void){};
};

class cWindow:public GUIBASE
{
    public:
         void onLoad(void){};
    void onUnload(void){};
    void onClick(void){};
};

class MyWindow:public cWindow
{
    public:
        void onLoad(void){MessageBox(null,"被成功调用了!", "测试", MB_OK);};
};

-----------------------------
我的问题是! 当创建一个 MyWindow 的对象时 在cWindow中如何调用 MyWindow 的 onLoad 方法?
难点在于MyWindow与cWindow下分离开的!我的意思是说在cWindow操作时完全不知道有 MyWindow这么一个子类!也就是操作任何从cWindow派生的子类的方法!有办法吗?
搜索更多相关主题的帖子: 操作子类的“方法” 
2008-09-07 13:56
BlueMouse
Rank: 1
来 自:贵州
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-6
收藏
得分:0 
如果真的元法做到!但只能说明C++的面向对象特性还不是很强大!
2008-09-07 14:53
BlueMouse
Rank: 1
来 自:贵州
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-6
收藏
得分:0 
我认为是可以做到的!但是我没有试成功!
为什么呢!从原理上来看
~~~~~~~~~~~~~~~~~~~~~~
因为 GUIBASE 和 cWindow 都是不需要实现的!也就是说他们没有对象的!
而你生成的对象都是派生类 MyWindow的对象, 所以我认为按原理说应该是
父类的对象不能调用派生类MyWindow的对象的成员才合理!
而通过声明指向基类GUIBASE的指针通过虚特性,应该可以调用派生类的对象的虚函数实现才对的吧! 应为生成的对象是派生类MyWindow的对象呀!不过我就是没有搞成功! 问题在于指针声明成那一个类的它就只能调用那个杰的对应的虚函数的实现体!而我不可能把指针声明成的派生类的类型。因为我要的是派生类可以重新实现虚函数,也可以不实现!当不实现时就用 cWindow 的对应虚函数实现体!我被困很久了!
2008-09-07 15:08
BlueMouse
Rank: 1
来 自:贵州
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-6
收藏
得分:0 
我的目的是要用面向对象的思想来包装一个自己的 windows 程序的基本框架!
也就是像我做要一个库! GUIBASE, cWindow 是我自定义和实现的!

而 MyWindow 对库来说是不可知的!因为用库编程人员从cWindow派生出去后给的类名对“库”来说是不可知的!
2008-09-07 15:12
BlueMouse
Rank: 1
来 自:贵州
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-6
收藏
得分:0 
没有问题·!试过了!是我的程序那里出了问题!但不是类和虚函数的问题
2008-09-08 13:09
BlueMouse
Rank: 1
来 自:贵州
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-6
收藏
得分:0 
问题不是出在类的存取权限上,也不是虚函数的问题!因为下面的代码中MyWindow中的onLoad能被调用了!证明我的类代码没有错!也证明了C++的对向对象特性没有问题!
其实我上面说的就是多态特性的问题。下面的代码没有问题,所以是我的程序的别的地方出了问题!


这里特别这样说明,和贴上以下代码!以免新手被我先前的提问误导!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <windows.h>

class GUIBASE
{
public:
    virtual void onLoad(void){}
};

GUIBASE        *ptr;

class cWindow : public GUIBASE
{
public:
    cWindow(void)
    {
        ptr = this;
    };
    virtual void onLoad(void)
    {
    };
};

class MyWindow : public cWindow
{
public:
    void onLoad(void)
    {
        MessageBox(NULL, "被成功调用了!", "测试", MB_OK);
    }
};



int WINAPI WinMain (HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
    MyWindow    MyWindowObj;
    ptr->onLoad();
    return 0;
}

----------------------------
回 版主(中学者):
       在下读书时....现在很后悔呀..
       我的意思是说我没有上过大学,连高中都没有上过!呵呵!见笑了!
       所以在下不是贵州大学的!版主是在找贵州大学的同学还是朋友吧!
       很抱歉,我不是!

[[it] 本帖最后由 BlueMouse 于 2008-9-8 17:32 编辑 [/it]]
2008-09-08 17:26
BlueMouse
Rank: 1
来 自:贵州
等 级:新手上路
威 望:1
帖 子:52
专家分:0
注 册:2008-9-6
收藏
得分:0 
版主谦虚了!这是多态特性,面向对象编程很实用呀!呵呵! 我是想自己包装一个WINDOWS程序的基本框架! 不过遇到了N多问题!以后还得多多请教版主才是!
2008-09-08 17:40
快速回复:类的相关问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016936 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved