父类访问子类的保护成员函数

如题,子类有按钮单击事件。是保护类型的,父类是不能直接访问的。在不改变单击事件属性的情况下,要实现相同的功能应该如何实现呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?

作者: koukouwuwu   发布时间: 2011-06-16

父类访问子类的保护成员函数,说明你的程序结构就有问题。

简单的方法就是声明友元类,子类定义加上
friend class 父类;
就行了

作者: kyotrue   发布时间: 2011-06-16

为啥要用父类来访问子类?难道你用到了多态?
既然你用到了多态,那么对于公共接口函数本来就应该public化,virtual化,又为啥要搞成protected呢?不明白你在搞什么?

作者: shenyi0106   发布时间: 2011-06-16

引用 2 楼 shenyi0106 的回复:
为啥要用父类来访问子类?难道你用到了多态?
既然你用到了多态,那么对于公共接口函数本来就应该public化,virtual化,又为啥要搞成protected呢?不明白你在搞什么?


MFC中添加按钮单击事件默认为protected类型的

作者: koukouwuwu   发布时间: 2011-06-16

添加一个函数比较简洁,控件单击时,调用这个函数

作者: ouyh12345   发布时间: 2011-06-16

引用楼主 koukouwuwu 的回复:
如题,子类有按钮单击事件。是保护类型的,父类是不能直接访问的。在不改变单击事件属性的情况下,要实现相同的功能应该如何实现呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?

发送BN_CLICKED通知
PostMessage(HWND, WM_COMMAND, MAKEWPARAM(nID, BN_CLICKED), (LPARAM)HWND_BUTTON);

作者: VisualEleven   发布时间: 2011-06-16

引用楼主 koukouwuwu 的回复:
如题,子类有按钮单击事件。是保护类型的,父类是不能直接访问的。在不改变单击事件属性的情况下,要实现相同的功能应该如何实现呢?
如果再添加一个函数,和单击事件实现是一样的,这样代码就不够简洁。若把单击事件函数改为PUBLIC,就破坏了类的封装性。怎么办呢?

貌似有两个途径:
 1. 使用事件, 父类按钮事件处理中激发事件,这样子类就可以注册事件并进行处理了,不过该方法的可读性较差。
 2. 增加一个protected virtual 的方法,如果父类是抽象的,也可以考虑abstract 方法。 父类按钮事件处理中运行该方法,子类需要处理时重写对应方法即可。

作者: etudiant6666   发布时间: 2011-06-16