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. typecast運算符中的星號
- 2. LINQ運算符像*(星號)在sql
- 3. 在C++中使用運算符減號( - )
- 4. 在列表中使用星號運算符的目的
- 5. 無符號溢出模運算符C
- 6. C++運算符()括號 - 運算符類型()與類型運算符()
- 7. :c/C++中的運算符
- 8. C++中的符號計算
- 9. C++中的符號計算
- 10. Scala中的波形符號運算符
- 11. Python中的符號vs運算符
- 12. Visual C++逗號運算符和sse intrinsics
- 13. C++運算符()括號重載
- 14. C標準 - 逗號運算符語法
- 15. 奇數語法:範圍運算符後的星號(::)?
- 16. 帶數字的星號(*)運算符是什麼意思?
- 17. 〜C中的運算符
- 18. C中的typeof運算符
- 19. C++中的新運算符
- 20. = C++中的+運算符?
- 21. 單元減號運算符在C++中如何處理布爾運算符?
- 22. 括號中的運算符符號的括號
- 23. stat()和&符號運算符
- 24. C++運算符 ''
- 25. 運算符[] [] C++
- 26. 使用python的**運算符和*運算符時的符號
- 27. C++:運算符重載,運算符+
- 28. 什麼是C#中的問號運算符的意思?
- 29. C++運算符在已重載的運算符中重載
- 30. 詮釋浮點運算符C中的位運算符
您能否將代碼粘貼到您看到的地方? – 2010-03-30 20:45:01