指向成员函数指针,虚函数指针,静态成员函数指针

// PointtoMemberFunction.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <IOSTREAM>
using namespace std;

class A{
public:
    void f(){
        cout<<"f()"<<endl;
    }

    virtual void g(){
        cout<<"g()"<<endl;
    }

    static void h(){
        cout<<"h()"<<endl;
    }
};

int main(int argc, char* argv[])
{
    A  *pa = new A;

    typedef void (A::*pfuncf)(void);
    pfuncf testf = &A::f;
//    printf("%d\n",testf);
    (pa->*testf)();

    typedef void (A::*pfuncg)(void);  //与普通成员函数一样
    pfuncg testg = &A::g;
//    printf("%d\n",testg);
    (pa->*testg)();

    typedef void (*pfunch)(void);     //类中static看做一般函数,除了下面一行得加上个 A::,其余与一般函数一样
    pfunch testh = &A::h;
//    printf("%d\n",testh);
    (*testh)();             //使用时,就不需要A::了,与一般函数指针相同

    return 0;
}
时间: 2024-11-09 02:46:04

指向成员函数指针,虚函数指针,静态成员函数指针的相关文章

C++静态成员函数和静态数据成员

当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关.静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关. 静态数据成员的用途之一是统计有多少个对象实际存在. 静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的.也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一

C++基础(静态数据成员和静态成员函数)

[1.静态成员] 1.静态数据成员与全局变量一样都是静态分配存储空间的,在编译时,就要为类的静态数据成员分配存储空间.但全局变量在程序中的任何位置都可以访问它,而静态数据成员受到访问权限的约束.必须是public权限时,才可能在类外进行访问. 2.静态数据成员的初始化 (1)*静态数据成员的初始化是在类的源文件(.cpp)中,而不是在类的头文件(.h)中进行的.这是因为类声明位于头文件中,程序可能将头文件包括在其他几个文件中.如果在头文件中进行初始化,将出现多个初始化语句副本,从而引发错误. A

静态成员函数与pthread_create,纯虚函数匹配使用实例

最近在浏览朋友写的代码,发现有一个细节非常值得学习,在这里将代码贴出来简单分享一下: #ifndef THREAD_H_ #define THREAD_H_ #include <pthread.h> #include <stdexcept> #include "Copyable.h" /* * 这个线程类是个抽象类,希望派生类去改写它 */ class Thread : public Copyable{ public: Thread(); virtual ~Th

sdut 3-6 静态数据成员与静态成员函数

3-6 静态数据成员与静态成员函数 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握静态数据成员和静态成员函数的用法 要求设计一个点类Point,它具有两个double型的数据成员x,y.和一个静态数据成员count ,用以记录系统中创建点对象的数目.为该类设计构造函数和析构函数,在其中对count的值做修改,体现点的数目的动态变化.并为其添加一个静态成员函数用以输出count的值:成员函数showPoint()用于输出点的信息.

静态成员函数不能用const修饰 ,也不能存取nonstatic数据

C++中静态成员函数不能用static修饰的原因: static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数.这意味着一个静态成员函数只能访问它的参数.类的静态数据成员和全局变量. 不能用const的原因:一个静态成员函数访问的值是其参数.静态数据成员和全局变量,而这些数据都不是对象状态的一部分.而对成员函数中使用关键字const是表明:函数不会修改该函数访问的目标对象的数据成员.既然一个静态成员函数根本不访问非静态数据成员,那么就没必要使用const了. 什么时候

转-C++之虚函数不能定义成内联函数的原因

转自:https://blog.csdn.net/flydreamforever/article/details/61429140 在C++中,inline关键字和virtual关键字分别用来定义c++中的内联函数和虚函数,他们在各自的场合都有其各自的应用,下面将简单介绍他们各自的功能,然后在说明为什么一个函数不能同时是虚函数和内联函数(inline). 一.内联函数(inline)内联函数的目的是为了减少函数调用时间.它是把内联函数的函数体在编译器预处理的时候替换到函数调用处,这样代码运行到这

C++里的静态成员函数不能用const的原因

From http://blog.csdn.net/freeboy1015/article/details/7634950 static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数.这意味着一个静态成员函数只能访问它的参数.类的静态数据成员和全局变量. 不能用const的原因: 这是C++的规则,const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而类中的static函数本质上是全局函数,调用规

回调函数中调用类中的非静态成员变量或非静态成员函数

有关这方面的问题,首先说一点: 回调函数必须是静态成员函数或者全局函数来实现回调函数,大概原因是普通的C++成员函数都隐含了一个函数参数,即this指针,C++通过传递this指针给成员函数从而实现函数可以访问类的特定对象的数据成员.由于this指针的原因,使得一个普通成员函数作为回调函数时就会因为隐含的this指针问题使得函数参数个数不匹配,从而导致回调函数编译失败. 基于上面的理论,如何在类中封装回调函数呢? 回调函数只能是全局函数或者静态成员函数,但是由于全局函数会破坏封装性,所以只能用静

第26课 类的静态成员函数

1. 静态成员函数 (1)静态成员函数是类中特殊的成员函数,属于整个类所有 (2)可以通过类名直接访问公有静态成员函数 (3)可以通过对象名访问公有静态成员函数 (4)静态成员函数的定义:直接通过static关键字修饰成员函数 [编程实验]静态成员函数示例 #include <stdio.h> class Test { private: int i; static int s_j; public: int getI(); static void StaticFunc(const char* s

[email&#160;protected]类的静态成员变量和静态成员函数

参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2011/01/24/1943199.html 分析Qt程序时,碰到下面代码. QString str = QString("QFrame#avatar{border-image:url(%1.jpg)}").arg( QString::number(i) );   静态成员变量 静态成员函