CB *_*ley 30
就在这里.它是指向成员的操作符,用于指向成员类型的指针.
例如
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
}
Run Code Online (Sandbox Code Playgroud)
这里A是一个结构,ptr_to_memb是指向int成员的指针A.该.*联合收割机的A实例的指针构件,以形成左值表达式参照给定的适当构件A实例obj.
指向成员的指针可以指向数据成员或函数成员,甚至可以为虚函数成员"做正确的事".
例如这个程序输出 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;
}
Run Code Online (Sandbox Code Playgroud)
GMa*_*ckG 13
使用成员指针时,您可能会遇到该运算符:
struct foo
{
void bar(void);
};
typedef void (foo::*func_ptr)(void);
func_ptr fptr = &foo::bar;
foo f;
(f.*fptr)(); // call
Run Code Online (Sandbox Code Playgroud)
还有相关的是->*运营商:
func_ptr fptr = &foo::bar;
foo f;
foo* fp = &f;
(fp->*fptr)(); // call
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5569 次 |
| 最近记录: |