《C++ Primer》学习:指向类成员的指针

zcphoenix 2006-10-09 02:22:39
《C++ Primer(第三版)》学习到了“指向类成员的指针”,书上不论是指向成员变量、还是指向成员函数的指针,都可以使用类的private成员的地址进行赋值。
我觉得这样是不对的,并在VC6.0里面进行测试,结果是private、protected类型的类成员的地址都不能赋值给相同类型的指向类成员的指针。
所以,我想问一下各位大侠:private、protected类型的类成员的地址究竟能不能赋值给相同类型的指向类成员的指针?是Lipman大师忘了提了,还是VC6.0里面做了特殊的处理?
万分感激!!!
...全文
350 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcphoenix 2007-03-23
  • 打赏
  • 举报
回复
typedef int (Screen::*pWidth);
pWidth p1 = &Screen::_width

“Screen::_width”本身已经是非法操作,何况再加一个“&”取地址呢?!

谢谢楼上的各位
BluntBlade 2006-10-09
  • 打赏
  • 举报
回复
根据楼主对三个访问权限限定关键字的理解和回答,我个人认为楼主应该可以明白零楼的问题,不需要再做回答。
lw1a2 2006-10-09
  • 打赏
  • 举报
回复
SetWidth是public,_width是private,有什么问题?
zcphoenix 2006-10-09
  • 打赏
  • 举报
回复
上面的测试是成功的。
如果在main()中添加如下两行:
typedef int (Screen::*pWidth);
pWidth p1 = &Screen::_width;
编译就会出错:
: error C2248: '_width' : cannot access private member declared in class 'Screen'
: see declaration of '_width'
zcphoenix 2006-10-09
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

#include "Screen.h"

int main()
{
Screen s(40);
cout <<s.Width()<< endl;

typedef void (Screen::*pSetWidth)(int nNewValue);
pSetWidth p = &Screen::SetWidth;

(s.*p)(30);
cout << s.Width() << endl;

return 0;
}
zcphoenix 2006-10-09
  • 打赏
  • 举报
回复
class Screen
{
public:
Screen(int width = 0){_width = width;}
void SetWidth(int nNewValue){_width = nNewValue;}
int Width(){return _width;}
private:
int _width;
};
lw1a2 2006-10-09
  • 打赏
  • 举报
回复
贴你的代码看看
hziee_ 2006-10-09
  • 打赏
  • 举报
回复
贴点代码出来不就好了,不用那么抽象的去讨论了.
taodm 2006-10-09
  • 打赏
  • 举报
回复
呃,你定结论太早了,也太不完整了。
再认真看看C++ Primer的那一章吧。
另外,指向成员的指针,需要使用的场合非常非常少的,你暂时可以跳过。
等C++的知识再多点了,对OO也有所理解了,再回头来看吧。
zcphoenix 2006-10-09
  • 打赏
  • 举报
回复
我的结论:
一个指向类成员的指针,可以声明在类的外部,但是只能使用类的公有成员的地址赋值;
指向类成员的指针,也可以声明为类的成员;(但是没有搞懂怎么使用.....)
zcphoenix 2006-10-09
  • 打赏
  • 举报
回复
2楼的意思是,一个指向类成员的指针是要声明在类的内部吗?

4楼
public:类的接口!
protected:派生类可以直接访问的成员;
private:只有该类成员可以直接访问的类成员
todototry 2006-10-09
  • 打赏
  • 举报
回复
和taodm的看法
相同的,private,protect体现封装性,
能用指针随便的存取的话那岂不破坏了数据封装,
所以我觉得书的讲的
指向类的成员的指针变量,是类成员之时,才能存取。
个人意见,高手多多指教
BluntBlade 2006-10-09
  • 打赏
  • 举报
回复
请问楼主,C++的Public、Protected和Private三个关键字的语义是什么?
lw1a2 2006-10-09
  • 打赏
  • 举报
回复

不知道你在说什么
taodm 2006-10-09
  • 打赏
  • 举报
回复
呃,恐怕你看书不仔细吧。它定义的指向成员的指针变量也是这个类的成员。

65,186

社区成员

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

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