C ++中的点星号运算符 [英] dot asterisk operator in c++
本文介绍了C ++中的点星号运算符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在那里,如果要做什么?
is there, and if, what it does?
.*
推荐答案
是的。
例如,
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
是一个指向 int $ c的指针
A
的$ c>成员。 。*
组合了一个 A
实例和一个指向成员的指针,以形成一个左值表达式,该表达式引用了给定 A
实例 obj
。
Here, A
is a struct and ptr_to_memb
is a pointer to int
member of A
. The .*
combines an A
instance with a pointer to member to form an lvalue expression referring to the appropriate member of the given A
instance obj
.
指向成员的指针可以是指向数据成员或函数成员的指针,甚至会为虚拟函数成员做正确的事。
Pointer to members can be pointers to data members or to function members and will even 'do the right thing' for virtual function members.
例如该程序输出 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;
}
这篇关于C ++中的点星号运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文