请教权限问题!

aXu 2004-07-21 04:36:28
可不可以使用指针访问类中的保护型成员函数?在什么情况下可以?
...全文
109 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
aXu 2004-07-21
  • 打赏
  • 举报
回复
可以了
加了一个强制转换就可以了,谁能告诉我为什么?及类强制转换到派生类?怎么样寻找派生类的成员?
aXu 2004-07-21
  • 打赏
  • 举报
回复
我试验了一下,上面的程序还是不行,访问不了保护成员。
leonchew 2004-07-21
  • 打赏
  • 举报
回复
楼主这样当然可以了。
我在上面的回复中也说过:派生继承类中可以 :)
freefalcon 2004-07-21
  • 打赏
  • 举报
回复
派生类改写了那个函数

——当然可以了
aXu 2004-07-21
  • 打赏
  • 举报
回复
关键代码大概有10m,赫赫,公司的一个类库,我找到了一个派生类,该类中改写了那个函数,并且是public的,我想这是编译能通过的原因,大家怎么看?
class A
{
public:
A();
~A();
protected:
virtual void fun();
};
class Aa : public A
{
public:
Aa();
~Aa();
virtual void fun();
}
main()
{
A *pA;
pA->fun();
}
这样应该可以编译通过了。我在试试。
freefalcon 2004-07-21
  • 打赏
  • 举报
回复
你能把关键代码贴出来吗?比如该函数的在类中的声明,以及其使用,或者你彷写一个也行
leonchew 2004-07-21
  • 打赏
  • 举报
回复
应该没有。派生继承类中可以
aXu 2004-07-21
  • 打赏
  • 举报
回复
freefalcon(心宇—小小菜鸟想高飞)
你那么写我也知道,可是你看看我上面的贴子。
aXu 2004-07-21
  • 打赏
  • 举报
回复
我试验过了,是不可以,连编译都过不去,可是我却看到了,在我们公司的库里,很是奇怪。
m_pGObjectNew->OnConstruct_MouseOpProc_LDn();
看看我拷贝过来的东西。函数是指针的一个保护型成员。代码再vc里编译通过了。
freefalcon 2004-07-21
  • 打赏
  • 举报
回复
既然是保护的,就不允许这种情况出现,实际上当你对保护成员函数取地址时就已经访问到它了,编译器会积极的拒绝你

下面的代码可以,但它仍然是通过类自身的公共接口实现的

class A
{
public:
typedef void (A::*FP)();
FP get()
{
return print;
}
protected:
void print()
{
printf("Hi\n");
}
};

int main(int argc, char* argv[])
{
A a;
(a.*(a.get()))();
}
yjh1982 2004-07-21
  • 打赏
  • 举报
回复
没有可移植的方案
geesun 2004-07-21
  • 打赏
  • 举报
回复
可以吗?不可以吧!好像没有情况下面是可以的吧!保护成员是让继承的时候用的吧!对于外面的用户,他跟private是一样的吧!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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