有个“->*”的问题请教

_小青年儿_ 2011-11-12 11:07:22


34 ->*的作用是()

A 用来表示对象对指向的类成员指针的操作
B 用来表示对象的类成员的操作
C 用来表示指向对象的指针对类成员的操作
D 用来表示指向对象的指针对指向类成员指针的操作

大家说说“->*”是什么意思
...全文
340 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
HoterSpring 2011-11-16
  • 打赏
  • 举报
回复
是D。
比如this——>*p;
就可以表示class A
{
private:
int*p;
public:
…………
};
lixiang996 2011-11-16
  • 打赏
  • 举报
回复
据说,->*主要是用来实现“委托”...没仔细看,因为暂时用不着。
轩_邈 2011-11-16
  • 打赏
  • 举报
回复
根据本人粗浅的理解
->用于结构指针
*是引用吧。。
连起来。。有点不懂了···还没遇到过
tonywya 2011-11-16
  • 打赏
  • 举报
回复
这个语法实际使用中基本不会用到

应试教育害死人啊
_小青年儿_ 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ndy_w 的回复:]

这个语法其实不是太有用。除非类的内部有大量平行的元素(而又不是数组),或想要表格驱动的同类型函数。
[/Quote]

一语惊醒梦中人~
_小青年儿_ 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 mingliang1212 的回复:]

引用 14 楼 outmanlee 的回复:
引用 12 楼 mingliang1212 的回复:

先弄懂什么叫类成员指针吧:
不建议用,但是真的很有用。。。。好吧,我矛盾了。。。

http://wenku.baidu.com/view/d1ff653231126edb6f1a10f2.html


谢谢,看完这个文档终于明白了原来还有这样一种语法

但没明白你说的“真……
[/Quote]

谢谢高手 慢慢学习
_小青年儿_ 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 yisikaipu 的回复:]

呵呵,楼上什么 泛型 模板 的恐怕会吓着入门者

我举个简单的

总之用类成员指针,根源就两个字:抽象

C/C++ code
struct Cls
{
char a;
char b;
char c;

void f(){cout <<"f()" <<endl;a++;}
void g(){cout <<"g()" <<endl;b+……
[/Quote]

稍微有点意思了 这是不是表驱动.....谢啦
qwerty910619 2011-11-16
  • 打赏
  • 举报
回复
好像是D吧
yisikaipu 2011-11-16
  • 打赏
  • 举报
回复
呵呵,楼上什么 泛型 模板 的恐怕会吓着入门者

我举个简单的

总之用类成员指针,根源就两个字:抽象

struct Cls
{
char a;
char b;
char c;

void f(){cout <<"f()" <<endl;a++;}
void g(){cout <<"g()" <<endl;b++;}
void h(){cout <<"h()" <<endl;c++;}
void disp(){cout <<a <<b <<c <<endl <<endl;}
};

void call(Cls &obj, void (Cls::*func)())
{
(obj.*func)();
}

int main()
{
char Cls::*var_arr[]=
{
&Cls::a,
&Cls::b,
&Cls::c
};

void (Cls::*func_arr[])()=
{
&Cls::f,
&Cls::g,
&Cls::h,
&Cls::disp,
&Cls::h,
&Cls::g,
&Cls::f,
&Cls::disp
};

Cls x;

for(int i=0;i<sizeof var_arr/sizeof var_arr[0];++i)
x.*var_arr[i]='a'+i;

for(int i=0;i<sizeof func_arr / sizeof func_arr[0];++i)
call(x,func_arr[i]);

return 0;
}
iamnobody 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 outmanlee 的回复:]
引用 12 楼 mingliang1212 的回复:

先弄懂什么叫类成员指针吧:
不建议用,但是真的很有用。。。。好吧,我矛盾了。。。

http://wenku.baidu.com/view/d1ff653231126edb6f1a10f2.html


谢谢,看完这个文档终于明白了原来还有这样一种语法

但没明白你说的“真的很有用”是为什么,直接访问类成员变量,这个不是和……
[/Quote]

举个例子:



class Base
{
int a;
public:
Base():a(0){};
virtual void fun(){
std::cout<<"Base::fun()"<<std::endl;
};
virtual void inc(){ a++;};
void showa(){std::cout<<a<<std::endl;};
} ;

class Derive: public Base
{
public:
void fun(){
std::cout<<"Derive::fun()"<<std::endl;
};

void inc(){ Base::inc();Base::inc();};

};
template <class Type>
void DoMemberFunction(Type** first,Type**last,void (Type::*pfun)()){
while(first != last)
((*first++)->*pfun)();
};

int main(){
Base a,b,c;
Derive e,f,g;
Base* arr[] = { &a,&e,&b,&f,&c,&g};
//其实下面三句都可以用库函数:std::for_each(arr,arr+6,std::mem_fun(&Base::inc));代替。分别在algorithm头文件和functional头文件
DoMemberFunction(arr,arr+6,&Base::fun);//一般更多地用来访问函数成员,而不是数据成员。多态调用。
DoMemberFunction(arr,arr+6,&Base::inc);
DoMemberFunction(arr,arr+6,&Base::showa);//这是连接泛型编程和面向对象的桥梁。
system("pause");
return 0;
}

Peng4Wang1 2011-11-16
  • 打赏
  • 举报
回复
D 用来表示指向对象的指针对指向类成员指针的操作
ndy_w 2011-11-16
  • 打赏
  • 举报
回复
这个语法其实不是太有用。除非类的内部有大量平行的元素(而又不是数组),或想要表格驱动的同类型函数。
guixiefang 2011-11-16
  • 打赏
  • 举报
回复
刚接触,没看过具体定义,凭实践我觉得应该是D
tom29673 2011-11-16
  • 打赏
  • 举报
回复
我也是选 D ...
maoxing63570 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 outmanlee 的回复:]
但没明白你说的“真的很有用”是为什么,直接访问类成员变量,这个不是和封装矛盾的吗?
所有就想问什么情况有用?
[/Quote]
难道在你的世界中,类就只有个成员变量?
_小青年儿_ 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mingliang1212 的回复:]

先弄懂什么叫类成员指针吧:
不建议用,但是真的很有用。。。。好吧,我矛盾了。。。

http://wenku.baidu.com/view/d1ff653231126edb6f1a10f2.html
[/Quote]

谢谢,看完这个文档终于明白了原来还有这样一种语法

但没明白你说的“真的很有用”是为什么,直接访问类成员变量,这个不是和封装矛盾的吗?
所有就想问什么情况有用?
iamnobody 2011-11-13
  • 打赏
  • 举报
回复
先弄懂什么叫类成员指针吧:
不建议用,但是真的很有用。。。。好吧,我矛盾了。。。

http://wenku.baidu.com/view/d1ff653231126edb6f1a10f2.html
小白菜VS 2011-11-13
  • 打赏
  • 举报
回复
D 用来表示指向对象的指针对指向类成员指针的操作

liang_cheng_jie 2011-11-12
  • 打赏
  • 举报
回复
不懂太难
qwer_boo 2011-11-12
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
加载更多回复(9)

64,281

社区成员

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

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