成员指针运算符 .* 和 ->*
来源:互联网 发布:淘宝推荐好的男装店 编辑:程序博客网 时间:2024/05/24 01:45
有一种特殊的指针叫做成员指针,它们通常指向一个类的成员,而不是对象中成员的特定实例。
成员指针并不是真正的指针,它只是成员在对象中的偏移量,它们分别是:.* 和 ->* 。
下面例子说明了成员指针 .* 的用法:
成员指针并不是真正的指针,它只是成员在对象中的偏移量,它们分别是:.* 和 ->* 。
下面例子说明了成员指针 .* 的用法:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "stdafx.h"
#include <iostream>
using
namespace
std;
class
myclass {
public
:
int
sum;
void
myclass::sum_it(
int
x);
};
void
myclass::sum_it(
int
x)
{
int
i;
sum = 0;
for
(i = x; i; i--) sum += i;
}
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
myclass::*dp;
//指向 myclass 中整数类型成员变量的指针
void
(myclass::*fp)(
int
x);
//指向 myclass 中成员函数的指针
myclass c;
dp = &myclass::sum;
//获得成员变量的地址
fp = &myclass::sum_it;
//获得成员函数的地址
(c.*fp)(7);
//计算 1 到 7 相加的和
cout <<
"summation of 7 is "
<< c.*dp;
return
0;
}
运行输出: summation of 7 is 28
在上面程序中,创建了两个成员指针 dp 和 fp 。其中 dp 指向了成员变量 sum ,fp 指向了函数 sum_it() 。
需要注意指针的声明语法:在声明中使用了作用域解析运算符来指定指针指向的成员属于那个类。
当使用对象或对象引用来访问对象的成员时,必须使用 .* 运算符,如程序中的 c.*fp 和 c.*dp 这种用法。
如果使用指向对象的指针来访问对象的成员,那么必须使用 ->* 运算符,如下程序示例:
需要注意指针的声明语法:在声明中使用了作用域解析运算符来指定指针指向的成员属于那个类。
当使用对象或对象引用来访问对象的成员时,必须使用 .* 运算符,如程序中的 c.*fp 和 c.*dp 这种用法。
如果使用指向对象的指针来访问对象的成员,那么必须使用 ->* 运算符,如下程序示例:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "stdafx.h"
#include <iostream>
using
namespace
std;
class
myclass {
public
:
int
sum;
void
myclass::sum_it(
int
x);
};
void
myclass::sum_it(
int
x)
{
int
i;
sum = 0;
for
(i = x; i; i--) sum += i;
}
int
_tmain(
int
argc, _TCHAR* argv[])
{
int
myclass::*dp;
//指向 myclass 中整数类型成员变量的指针
void
(myclass::*fp)(
int
x);
//指向 myclass 中成员函数的指针
myclass *c, d;
//变量 c 显示是指向对象的指针
c = &d;
//将对一个对象的地址赋给 c
dp = &myclass::sum;
//获得成员变量的地址
fp = &myclass::sum_it;
//获得成员函数的地址
(c->*fp)(7);
//计算 1 到 7 相加的和
cout <<
"summation of 7 is "
<< c->*dp;
return
0;
}
运行输出:summation of 7 is 28
上面程序中,变量 c 是指向 myclass 类型对象的指针,所以应该使用 ->* 运算符来访问 sum 和 sum_it() 。
成员指针是为了处理特殊情况而设计,在一般程序设计中通常不需要用到他们。
from: http://www.groad.net/bbs/thread-5548-1-1.html
0 0
- 成员指针运算符 .* 和 ->*
- 成员指针运算符 .* 和 ->*
- 成员指针运算符 .* 和 ->*
- 成员指针运算符 .* 和 ->*
- 成员指针和成员指针逆向引用运算符".*"
- c++:成员指针运算符 .* 和 ->*
- 成员指针运算符
- C/C++中的成员运算符(.)和指针运算符(->)
- 成员运算符(.)与指针运算符(->)的区别
- 运算符和指针
- C++ 成员运算符(. 和 ->)
- [C]成员运算符"."和间接成员运算符"->"浅析
- 通过指针运算符访问对象成员和构造函数的特点
- 类和对象 , 四个默认成员函数及运算符重载 , 隐含的this指针
- 类和对象(this指针、默认成员函数及运算符的重载)
- 成员指针访问运算符号
- 含有指针成员时的赋值运算符重载
- c++指针运算符(&和*)
- HDU1541 Stars(树状数组)
- 关于sort的使用
- 奔五的人学iOS:swift获取网页并解析需要的内容(1)
- FragmentPagerAdapter notifyDataSetChanged不起作用
- How computer work?
- 成员指针运算符 .* 和 ->*
- 智能的最小单元
- zstu 1024 Wooden Sticks
- Mac下利用shadowsocks配置Dropbox代理服务器
- 关于用struts2框架中iframe对应的jsp页面的不到action的值的问题
- Leetcode ☞ 319. Bulb Switcher ☆ brain teaser
- 1016: [JSOI2008]最小生成树计数
- MySQL知识(二十一)——用户管理之权限管理、访问控制
- 从Eclipse迁移到Android Studio