#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. python 中的一些基础算法:递归/冒泡/选择/插入

    递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...

  2. MySQL中创建存储过程示例

    在这个示例中需要用到一张名为test_table的表,我们使用show create table test_table查看表的创建过程: CREATE TABLE `test_table` ( `id ...

  3. MySQL创建及删除临时表

    示例SQL: drop temporary table if exists testdb.tmp_test_table; create temporary table testdb.tmp_test_ ...

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

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

  5. 关于新小米盒子的Recovery模式如何进入

    26日下的盒子订单,经过几经波折,终于在昨天来到了我的面前,新东西到手,难免少不了一些折腾:升级系统,安装软件等.一顿折腾之后,想完全恢复到出厂设置,给盒子清一下,想进入盒子的Recovery模式,按 ...

  6. Jenkins备份插件backup

    这个插件可以备份Jenkins的JENKINS_HOME目录,并恢复,但是版本太旧了. 有一些其他插件可以定时备份,搜索Backup https://www.cnblogs.com/cxwblog/p ...

  7. 关于cookies、sessionStorage和localStorage解释及区别

    在浏览器查看 HTML4的本地存储 cookie 浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和sessio ...

  8. 【链接】js监听input输入框内容变化

    https://blog.csdn.net/idomyway/article/details/79078625 $("#input1").bind("input prop ...

  9. java源码 -- TreeMap

    简介 TreeMap 是一个有序的key-value集合,它是通过红黑树实现的.TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合.TreeMap 实现了N ...

  10. java源码 -- AbstractList

    AbstractList AbstractList是实现List接口的抽象类,AbstractList抽象类与List接口的关系类似于AbstractCollection抽象类与Collection接 ...