成员函数指针和指向静态成员函数的指针

#include <iostream>
using namespace std;

class Student{
public:
    Student(const string& name):m_name(name){}
    void who(void){
        cout << m_name << endl;
    }
    string m_name;
    static int s_add(int a,int b){
        return a+b;
    }
};
int main(void){
    //成员函数指针
    void (Student::*pwho)(void) = &Student::who;
    Student s1("zhnangfei");
    Student s2("zhaoyun");
    (s1.*pwho)();
    Student* ps = &s2;
    (ps->*pwho)();
    //指向静态成员函数的指针
    int (*padd)(int,int) = Student::s_add;
    //int (Student::*padd1)(int,int) = Student::s_add;错误的写法
    cout << padd(100,200) << endl;
    return 0;
}

成员函数的指针(即函数指针):
类型 ()(形参类型) = &类名::成员函数名(注意类名前一定要加取地址符&,不然报错)

指向静态成员函数的指针(还是函数指针):
类型 ()(形参类型) = Student::s_add(注意类型前面可以不加&也可以加)
时间: 2024-10-07 00:23:43

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

不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, const 对象的引用 作者:webabcd 介绍不可或缺 Windows Native 之 C++ this 指针 对象数组 对象和指针 const 对象 const 指针和指向 const 对象的指针 const 对象的引用 示例1.CppEmployee 类CppEmployee.h #pragma

const指针,指向const的指针,指向const的const指针 -- C

int main() { //记忆方法:中间加个"是"字变得很好理解 /* 指针函数 */ void * f(); //按顺序写,先写指针(void *),再写函数(f()) //指针是函数 -- 这个指针是一个函数. /* 函数指针 */ void (* f)(); //函数是指针 -- 这个函数是一个指针. //暂时没想到怎么记忆. /* const 指针 */ const int * a; /* 指向 const 的指针 -- 指针 const*/ int * const b;

函数的效能 &amp; 指向 Member Functions 的指针与其效能

nonmember friend 或 nonstatic member 或 static member 函数都会被转化为相同的形式, 因此三者的效率完全相同.另外, inline member function 的效率一直是最高的(前提是简单操作), 优化后的效率更是高, 这是因为编译器会将被视为不变的表达式提到循环之外, 因此只计算一次, inline 函数不只能够节省一般函数所调用的负担, 也提供程序额外的优化机会.virtual function 和 多重继承 的效率要低于一般函数, 要再

为什么内联函数,构造函数,静态成员函数不能为virtual函数?

1> 内联函数 内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内联函数为虚函数. 2> 构造函数 构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数. 3> 静态成员函数 静态成员函数属于一个类而非某一对象,没有this指针,它无法进行对象的判别. 这个可以从两个角度去理解:1.virtual意味着在执行时期进行绑定,所以在编译时刻需确定信息的不能为virtual     

指针总结以及常量指针与指向常量的指针与指向常量的常指针

/*指针总结: 1:指针未被初始化一个地址或刚删除一个指针都要将其初始化为0,否则的话将会导致该指针失控 2:假如不想改变一个指针,那么将该指针定义为const, 假如不想改变该指针指向的值,将指针指向的值定义为const 假如即不想改变指针又不想改变指针指向的值,那么将指针和指针指向的值都定义为const 在new堆中创建一个对象,然后将内存地址赋给指针,之后我们就可以通过内存地址访问堆中的对象, 假如要删除该对象,我们只需要使用关键字delete,那么就会删除指针指向的对象并释放存储对象的内

常指针和指向常量的指针和指向常量的常指针

(1)指向常量的指针:是一个指向的内容是常量的指针变量,const int *p=&x;不可修改*p的内容,但可以让指针p指向另一个地址,和int const *p一样 (2)常指针:int *const p=&x指针本身是个常量,固定指向某一变量,因此p不可变,但是*p可变 (3)指向常量的常指针:const int *const p=&x,指针p永远指向x,并且不能通过它修改它指向的地址的内容

指针常量、常量指针和指向常量的常量指针

int *const p:指针常量,其本质是一个常量(用指针修饰),这个常量的内容是一个指针,不可以修改p指向的地址,但是可以修改*p的值.定义的时候要赋初值.(数组名也是一个指针常量) int const *p(const int *p):常量指针,其本质是一个指针(用const修饰).说明它指向的对象是一个常量,这个对象不能被更改,可以修改p指向的地址,但是不可以修改*p的值. const int *const p:指向常量的常量指针,既不可以修改p指向的地址,也不可以修改*p的值. . 总

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

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

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

一 静态数据成员: 1.静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中,因为这样做会引起重复定义这样的错误.即使加上#ifndef #define #endif或者#pragma once也不行. 其定义方式与全局变量相同.举例如下: xxx.h文件 class base{ private: static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持. }; xxx.cpp文件 con