#include <iostream>
using namespace std; class Student
{
public:
Student(string n, int nu):name(n),num(nu){}
string name;
int num;
}; int main()
{
Student s("zhangsi", );
Student *ps = &s; Student ss("zhaoqi", );
Student *pss = &ss;
//string *ps = &s.name;//the action destroy the encapsulation
//下面讲的指针,是指向类层面的指针,而不是对象层面
//要想使用,还要跟具体的对象产生关系
string Student:: *psn = &Student::name;
cout << s.*psn << endl;
cout << ps->*psn << endl; cout << ss.*psn << endl;
cout << pss->*psn << endl; return ;
}

在c++中

.*:Pointer to member

->*:Pointer to member

Point to class function

#include <iostream>
using namespace std; class Student
{
public:
Student(string n, int nu):name(n),num(nu){}
void dis(int idx)
{
cout << "idx:" << idx << "name:" << name << "number:" << num << endl;
}
string name;
int num;
}; int main()
{
void (Student::*pdis)(int idx) = &Student::dis;
Student s("zhangsan", );
Student *ps = &s;
Student ss("zhangsan", );
Student *pss = &ss;
(s.*pdis)();
(ss.*pdis)();
(ps->*pdis)();
(ps->*pdis)(); return ;
} test1:
#include <iostream>
using namespace std; struct Point
{
    int add(int x, int y)
    {
        return x + y;
    }
    int minus(int x, int y)
    {
        return x - y;
    }
    int multi(int x, int y)
    {
        return x * y;
    }
    int div(int x, int y)
    {
        return x / y;
    }
}; int oper(Point &p, int (Point::*pf)(int x, int y), int x, int y)
{
    return (p.*pf)(x,y);
}
typedef int (Point::*PF)(int x, int y);
int main()
{
    Point p;
    PF pf = &Point::add;
    cout << oper(p, pf, 1, 2);
    return 0;
}

更加隐蔽的接口

#include <iostream>
using namespace std;
class Game
{
public:
Game()
{
pf[] = &Game::f;
pf[] = &Game::g;
pf[] = &Game::h;
pf[] = &Game::l;
}
void select(int i)
{
if (i >= && i <= )
{
(this->*pf[i])(i);
}
}
private:
void f(int idx) { cout << "void f(int idx)" << "idx:" << idx << endl; }
void g(int idx) { cout << "void g(int idx)" << endl; }
void h(int idx) { cout << "void h(int idx)" << endl; }
void l(int idx) { cout << "void l(int idx)" << endl; }
enum{
nc =
}; void (Game::*pf[nc])(int idx);
}; int main()
{
Game g;
g.select();
g.select();
g.select();
return ;
}

Point to class member的更多相关文章

  1. 添加 Pool Member - 每天5分钟玩转 OpenStack(123)

    我们已经有了 Load Balance Pool "web servers"和 VIP,接下来需要往 Pool 里添加 member 并学习如何使用 cloud image. 先准 ...

  2. ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除

    本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...

  3. ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

    上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...

  4. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

  5. ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章

    上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据.   目录: ASP.N ...

  6. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

  7. ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

    上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构

    上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(3)修改资料、修改密码

    在上一篇博客中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录IP,这次补上.今天做修改资料和修改密码,TryUpdateModel是新用到的东西. 目录: AS ...

  10. ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(2)用户登录、注销

    上次实现了用户注册,这次来实现用户登录,用到IAuthenticationManager的SignOut.SignIn方法和基于声明的标识.最后修改用户注册代码实现注册成功后直接登录. 目录: ASP ...

随机推荐

  1. osg qt 三维模型加载

    osg::ref_ptr<osg::Node> OSG_Qt_::operateMatrix() { osg::ref_ptr<osg::Group> group = new ...

  2. 123457123457#0#-----com.yuming.YiZhiFanPai01--前拼后广--益智早教游戏记忆翻牌cym

    com.yuming.YiZhiFanPai01--前拼后广--益智早教游戏记忆翻牌cym

  3. building confluentinc kafka-connect-hdfs

    When I try to compile I get an error about a missing SNAPSHOT dependency. The error looks something ...

  4. Django中验证码的登录

    需求概述 一般登录页面或者其他页面都需要验证码的功能,那在Django中如何实现呢? 这基本就需要用到第三方模块了:pillow 还需要两个文件,一个是字体文件:Monaco.ttf,另一个是一个模块 ...

  5. (八)Centos之文件搜索命令locate

    一.文件搜索命令locate locate优点是 搜索速度快 ,缺点是只能按文件名搜索: 1.1 新建一个文件   1.2 更新数据库 locate命令搜索的是 /var/lib/mlocate 下的 ...

  6. 它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供

    找不到类型“Services.CalculatorService”,它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/servi ...

  7. IE和火狐的css兼容性问题

     CSS对浏览器器的兼容性具有很高的价值,通常情况下IE和Firefox存在很大的解析差异,这里介绍一下兼容要点. 1.DOCTYPE 影响 CSS 处理 2.FF: div 设置 margin-le ...

  8. 上传文件报错500或者文件大于2M上传不上去解决方法

    修改php.ini 配置文件: 先找到配置文件------find / -name php.ini 打开php.ini修改内容:post_max_size ------ post请求上传参数的大小限制 ...

  9. JAVA第09次实验(IO流)

    JAVA第09次实验(IO流) 0.字节流与二进制文件 我的代码 import java.io.DataInputStream; import java.io.DataOutputStream; im ...

  10. python基础学习记录......

    1.IDEA写python 打开IDEA,File--->settings---->Plugins    输入python  安装   重启IDEA 2.新建Project     选择P ...