C++ 类成员指针
来源:互联网 发布:身份证识别网络阅读器 编辑:程序博客网 时间:2024/06/05 10:26
类成员指针
1.成员指针式可以指向类的非静态成员的指针。类的静态成员不属于任何对象,因此无需特殊的指向静态成员的指针。指向静态成员的指针的普通指针没有任何区别。
2.当初始化一个类成员指针时,我们令其指向类的成员,但不指定代成员所属的对象,直到使用到成员指针时,才提供所属的对象。
3.数据成员指针
例:class screen{
public:typedef std::string::size_type pos;
char get_cursor() const {return const[curse];};
char get() const;
char get(pos ht, pos wd) const;
private:
std::string contents;
pos cursor;
pos height , wight;
};
(1)const string screen::*pdata;//声明,一个指向screen类的const string 成员的指针;
(2)pdata=&screen::contents;//初始换
(3)使用数据成员指针
当我们初始化一个成员指针或为成员指针赋值时,该指针别并没有指向任何数据。成员指针指定了成员而非所属的对象,只有当解引用成员指针时我们才能提供对象的信息。
screen myscreen;
*pscreen=&myscreen;
auto s=myscreen.(*pdata);或s=pacreen->(*pdata);
(4).返回成员指针函数
常规的访问控制规则对成员指针同样有效,public,private,protected。如果对于某个类,我们希望访问他的私有成员,最好定义一个函数令其返回值是指向成员的指针。
4.成员函数指针
auto pmf=&screen::get_cursor;
(1)重载问题:
char (screen::*pmf)(screen::pos,screen::pos)const;//函数指针声明
pmf=&screen::get;
(2)和普通函数不同,在成员函数和指向成员函数的指针之间不存在自动转换规则:
pmf=&screen::get;//正确
pmf=screen::get;//错误
(3)使用成员函数指针
screen myscreen;
*pscreen=&myscre;
char c1=(pscreen->*pmf)(0,0 );
char c2=(myscreen.(*pmf)) (0,0);
5.将成员函数用作可调用对象
(1)与普通的函数指针不同,成员指针不是一个可调用对象。
例:
auto fp=&string::empty;
find_if(svec.begin(), svec.end(), fp);//错误:要想通过成员指针调用函数必须使用->*y运算符。
(2)使用function生成一个可调用对象
function<bool (const string&,const string&)>fcn=&string::empty;
find_if(svev.begin(),svec.end(),fcn);
(3)使用mem_fn生成一个可调用对象
和function一样,mem_fn也定义在functional头文件中,并且可以从成员指针生成一个可调用对象;和function不同,mem_fn可以根据成员指针的类型推断可调用对象的类型,而无需用户显示的指定。
find_if(svec.begin(),svec.end(),mem_fn(&string::empty));
mem_fn生成的可调用对象可以通过对象调用,也可以通过指针调用:
auto f=mem_fn(&string::empty);
f(*svec.begin());//对象调用
f(&svec[0]);//指针调用
(4)使用bind生成一个可调用对象
auto it=find_if(svec.begin(),svec.end(),bind(&string::empty,_1));
和function类似的地方是,当我们使用bind时,必须将函数中用于表示对象的隐式形参转换成显示的。和mem_fn类似生成的可调用对象可以通过对象调用,也可以通过指针调用:
auto f=bind(&string::empty,_1);
f(*svec.begin());//对象调用
f(&svec[0]);//指针调用
- C++_类成员变量指针
- C++_Primer_chapter18 3.类成员的指针
- c函数指针和c++类成员函数指针
- 含有指针成员的类的拷贝[C/C++/C#]
- C/C++学习笔记:指向类成员变量的指针
- 类成员函数指针
- 类成员函数指针
- 类成员函数指针
- 类成员函数指针
- 类成员函数指针
- 类成员指针
- c++ 类成员指针
- 类成员函数指针
- 类成员指针
- “类” 成员函数 指针
- 类成员指针
- 类成员函数指针
- 类成员函数指针
- 小黑小波比.app服务端常见问题6
- 对JAVA中MVC设计模式、JAVAWEB的三层架构、AOP面向切面编程的总结
- 算法导论-16.1-4 活动教室选择问题
- windows下git的安装、配置与操作(一)——安装与配置
- Win8系统108个运行命令 你能记住多少?
- C++ 类成员指针
- 聊聊高并发(三十二)实现一个基于链表的无锁Set集合
- Myeclipse8.5 反编译插件 jad 安装
- asp.net自定义按钮分组
- Unknown mandatory EABI object attribute 44 报错?
- 在Ubuntu中安装 arm-linux-gcc
- 第05讲- DDMS中logcat的使用
- 发布python的包至pypi服务器
- 三张工单号全部显示在一格里及BOM层级