父类访问子类的保护成员函数
如题,子类有按钮单击事件。是保护类型的,父类是不能直接访问的。在不改变单击事件属性的情况下,要实现相同的功能应该如何实现呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?
作者: koukouwuwu 发布时间: 2011-06-16
父类访问子类的保护成员函数,说明你的程序结构就有问题。
简单的方法就是声明友元类,子类定义加上
friend class 父类;
就行了
简单的方法就是声明友元类,子类定义加上
friend class 父类;
就行了
作者: kyotrue 发布时间: 2011-06-16
为啥要用父类来访问子类?难道你用到了多态?
既然你用到了多态,那么对于公共接口函数本来就应该public化,virtual化,又为啥要搞成protected呢?不明白你在搞什么?
既然你用到了多态,那么对于公共接口函数本来就应该public化,virtual化,又为啥要搞成protected呢?不明白你在搞什么?
作者: shenyi0106 发布时间: 2011-06-16
引用 2 楼 shenyi0106 的回复:
为啥要用父类来访问子类?难道你用到了多态?
既然你用到了多态,那么对于公共接口函数本来就应该public化,virtual化,又为啥要搞成protected呢?不明白你在搞什么?
为啥要用父类来访问子类?难道你用到了多态?
既然你用到了多态,那么对于公共接口函数本来就应该public化,virtual化,又为啥要搞成protected呢?不明白你在搞什么?
MFC中添加按钮单击事件默认为protected类型的
作者: koukouwuwu 发布时间: 2011-06-16
添加一个函数比较简洁,控件单击时,调用这个函数
作者: ouyh12345 发布时间: 2011-06-16
引用楼主 koukouwuwu 的回复:
如题,子类有按钮单击事件。是保护类型的,父类是不能直接访问的。在不改变单击事件属性的情况下,要实现相同的功能应该如何实现呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?
如题,子类有按钮单击事件。是保护类型的,父类是不能直接访问的。在不改变单击事件属性的情况下,要实现相同的功能应该如何实现呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?
发送BN_CLICKED通知
PostMessage(HWND, WM_COMMAND, MAKEWPARAM(nID, BN_CLICKED), (LPARAM)HWND_BUTTON);
作者: VisualEleven 发布时间: 2011-06-16
引用楼主 koukouwuwu 的回复:
如题,子类有按钮单击事件。是保护类型的,父类是不能直接访问的。在不改变单击事件属性的情况下,要实现相同的功能应该如何实现呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?
如题,子类有按钮单击事件。是保护类型的,父类是不能直接访问的。在不改变单击事件属性的情况下,要实现相同的功能应该如何实现呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?
貌似有两个途径:
1. 使用事件, 父类按钮事件处理中激发事件,这样子类就可以注册事件并进行处理了,不过该方法的可读性较差。
2. 增加一个protected virtual 的方法,如果父类是抽象的,也可以考虑abstract 方法。 父类按钮事件处理中运行该方法,子类需要处理时重写对应方法即可。
作者: etudiant6666 发布时间: 2011-06-16