以下是做实验的一段代码:

#include <iostream>

using namespace std;

typedef void (*p)();

class Object
{
public:
static void s_fun_1() { cout << "static function 1\n"; } void fun_1() {cout << "no static function 1\n";}
}; typedef void (Object::*p1)(); void do_fun(p p_) {(*p_)();} int main()
{
do_fun(Object::s_fun_1); Object obj; p1 p1_ = &Object::fun_1; (obj.*p1_)();
return 0;
}

在C++中,各个编译器的实现可能不一样,可是对于no static Member function的处理还是有迹可循的。对于no static Member function的处理一般有下面几个步骤:

1.改写函数的函数原型(signature),以为函数安插一个额外的參数,作为存取对象数据成员的一个通道,这个过程也就将Member变为了no Member,这个參数就是this指针。

比如 void Object::fun()转化为void Object::fun(Object * const this);在成员函数中this指针是不可赋值的体如今这边。

假设是 void Object::fun()则转化为void Object::fun(const Object * const this);

2.对数据成员的使用通过提供的通道也就this指针完毕。

3.对函数名进行mangling,使它变为程序中唯一的词汇。

对于NRV的实施也是在这个过程中,其在第一步提供了訪问通道同一时候为返回值提供了返回通道。

而对于static Member function的处理。没有涉及到Class Object,由于其是类方法,不会使用到数据成员,不须要绑定到特定的对象。

上面的执行结果:

能够看出对static Member function的处理,其的地址是一个普通的函数指针。我们能够将它做个callback来使用。而对于nostatic Member function的须要详细关系到class,调用时须要也就关联到详细的class Object。例如以下:

可是事实上。从上面可知,我们的fun_1没有使用到Member data。那么就能够这样:

这当然也是能够执行的。

static 和 no static Member function学习的更多相关文章

  1. c++ 静态类成员函数(static member function) vs 名字空间 (namespace)

    好多人喜欢把工具函数做成static member function.这样以增加隐蔽性和封装性,由其是从C#,java转而使用c++的开发人员. 例如: class my_math { public: ...

  2. "Cannot declare member function ...to have static linkage"错误

    英文解释: if you declare a method to be static in your .cc file. The reason is that static means somethi ...

  3. Function语义学之member function

    之前我们讲过编译器会对 nonmember functions 进行怎样的扩充和该写,今天我们来讲一下 member functions 函数调用方式 一.Nonstatic Member Funct ...

  4. how to get address of member function

    see:http://www.cplusplus.com/forum/general/136410/ & http://stackoverflow.com/questions/8121320/ ...

  5. C++对象模型——指向Member Function的指针 (Pointer-to-Member Functions)(第四章)

    4.4 指向Member Function的指针 (Pointer-to-Member Functions) 取一个nonstatic data member的地址,得到的结果是该member在 cl ...

  6. Java中的内存处理机制和final、static、final static总结

    Java中的内存处理机制和final.static.final static总结   装载自:http://blog.csdn.net/wqthaha/article/details/20923579 ...

  7. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  8. Thinkphp---------Call to a member function free_result() on a non-object

    1.平时用框架用久了,直接执行原生的sql反而做起来反应迟钝了.今天遇到一个问题,就是直接执行一个添加的sql语句,然后我用了TP框架的M()->query();方法.运行以后,会报Call t ...

  9. :( Call to a member function Table() on a non-object 错误位置

    :( Call to a member function Table() on a non-object 错误位置 $Model不是模板,是你自己先前链接数据库返回的对象...我的是改为$Form

随机推荐

  1. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置(转)

    原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建 ...

  2. Python学习笔记(一):Python基础学习

    总结的内容: 1.变量的命名 2.脚本的注释 3.运算符 4.用户输入语句 一.变量的命名 1.变量用于引用在程序中可能会变化的值.它们被称为变量是因为它们可能引用存储在内存中的不同的值. 2.变量的 ...

  3. malloc、calloc和realloc比较

    1.先看看它们的原型(stdlib.h): void *malloc( size_t size ); void *calloc( size_t numElements, size_t sizeOfEl ...

  4. VC++ 设置控件显示文本的前景色、背景色以及字体

    在每个控件开始绘制之前,都会向其父窗口发送WM_CTLCOLOR通告消息,在该消息的处理函数中,可以设置控件显示文本的前景色.背景色以及字体.该消息处理函数还要求返回一个画刷的句柄,用于在控件具体的绘 ...

  5. oracle备份恢复学习

    备份和恢复是常遇到的操作,逻辑备份和物理备份.物理备份又分为冷备份和热备份. 一.逻辑备份,恢复 是指使用exp命令,简单易行,不影响正常的数据库操作.exp   用户名/密码   file=/hom ...

  6. JAVA读取XML,JAVA读取XML文档,JAVA解析XML文档,JAVA与XML,XML文档解析(Document Object Model, DOM)

    使用Document Object Model, DOM解析XML文档 也可参考我的新浪博客:http://blog.sina.com.cn/s/blog_43ac5543010190w3.html ...

  7. PWM DAC vs. Standalone

    http://analogtalk.com/?p=534 http://analogtalk.com/?p=551 Posted by AnalogAdvocate on April 09, 2010 ...

  8. ldd pvs dis on solaris 10

    #include <QtGui/QApplication> #include <QtGui/QDialog> int main(int argc, char *argv[]) ...

  9. Javascript:猜猜弹出的是啥?为啥?

    背景 经常需要向新入职的年轻同学解释Javascript的两个概念:单线程和作用域链,今天就再写篇博客说明一下. 单线程 队列:只有一个用来存储回调方法的队列. 消费线程:只有一个消费线程,不停的从队 ...

  10. Selenium2+Python自动化-处理浏览器弹窗(转载)

    本篇转自博客:上海-小T 原文地址:http://blog.csdn.net/real_tino/article/details/59068827 我们在浏览网页时经常会碰到各种花样的弹窗,在做UI自 ...