20
A
回答
26
是的,有。它是指向成员类型的指针成员操作符。
E.g.
struct A
{
int a;
int b;
};
int main()
{
A obj;
int A::* ptr_to_memb = &A::b;
obj.*ptr_to_memb = 5;
ptr_to_memb = &A::a;
obj.*ptr_to_memb = 7;
// Both members of obj are now assigned
}
这里,A
是一个结构和ptr_to_memb
是指向的A
int
构件。 .*
将A
实例与指向成员的指针结合起来,形成一个左值表达式,指向给定的A
实例obj
的相应成员。
指向成员的指针可以是指向数据成员或函数成员的指针,甚至可以为虚拟函数成员“做正确的事情”。
E.g.此程序输出f(d) = 1
struct Base
{
virtual int DoSomething()
{
return 0;
}
};
int f(Base& b)
{
int (Base::*f)() = &Base::DoSomething;
return (b.*f)();
}
struct Derived : Base
{
virtual int DoSomething()
{
return 1;
}
};
#include <iostream>
#include <ostream>
int main()
{
Derived d;
std::cout << "f(d) = " << f(d) << '\n';
return 0;
}
12
您可能会遇到操作使用成员指针时:
struct foo
{
void bar(void);
};
typedef void (foo::*func_ptr)(void);
func_ptr fptr = &foo::bar;
foo f;
(f.*fptr)(); // call
而且相关的是->*
操作:
func_ptr fptr = &foo::bar;
foo f;
foo* fp = &f;
(fp->*fptr)(); // call
相关问题
- 1. LINQ运算符像*(星号)在sql
- 2. 在C++中使用运算符减号( - )
- 3. C++运算符()括号 - 运算符类型()与类型运算符()
- 4. Scala中的波形符号运算符
- 5. C++运算符()括号重载
- 6. 奇数语法:范围运算符后的星号(::)?
- 7. 带数字的星号(*)运算符是什么意思?
- 8. = C++中的+运算符?
- 9. C++中的新运算符
- 10. 单元减号运算符在C++中如何处理布尔运算符?
- 11. 括号中的运算符符号的括号
- 12. stat()和&符号运算符
- 13. C++运算符 ''
- 14. 运算符[] [] C++
- 15. JavaScript中的逗号运算符
- 16. 什么是C#中的问号运算符的意思?
- 17. C++运算符在已重载的运算符中重载
- 18. C中的代字符运算符在
- 19. Haskell的Foreign.C相当于C的&符号运算符(&)
- 20. C++中的过载分配和圆括号运算符
- 21. xpath中的逗号运算符,是否像c?
- 22. Javascript逗号运算符
- 23. boost :: phoenix3逗号运算符
- 24. 运算符逗号重载
- 25. Python冒号运算符
- 26. JavaScript冒号运算符
- 27. 点运算符C++
- 28. C++ delete []运算符
- 29. C++ typeid运算符
- 30. C++ overload []运算符
您能否将代码粘贴到您看到的地方? – 2010-03-30 20:45:01