C++指向类成员的指针详解

 更新时间:2021年09月16日 15:23:33   作者:weixin_41914179  
指向类成员的指针总的来讲可以分为两大类四小类(指向数据成员还是成员函数,指向普通成员还是静态成员),希望本片文章能给你带来帮助

序言:在C++中,可以定义一个指针,使其指向类成员函数或或成员函数,然后通过指针来访问类的成员,这包括指向属性成员的指针和指向成员函数的指针。

一.指向普通变量和函数的指针

指向普通变量的指针

int a=100;
int *p = &a;

指向函数的指针(即函数指针)

int(*p)(int, int);

这条语句的理解:定义了一个指向函数的指针变量p,首先它是一个指针变量(*p),其次前面的int表示指针变量可以指向返回类型为int型的函数,后面括号中的两个int表示这个指针变量可以指向两个参数都是int型的函数。所以合起来的意思就是:定义了一个指针变量p,该指针变量可以指向返回值类型为int型,且有两个整形参数的函数,p的类型为int(*)(int, int)

函数指针的定义方式为:

函数返回值类型 (* 指针变量名) (函数参数列表);

示例

int Func(int x);   /*声明一个函数*/
int (*p) (int x);  /*定义一个函数指针*/
p = Func;          /*将Func函数的首地址赋给指针变量p*/

二.指向类成员的指针

1.指向类数据成员的指针

//定义和赋值(和类相关)
数据类型 类名:: *指针名 = &类名::成员名
//使用(和对象相关)
//由于类不是运行时 存在的对象。因此,在使用这类指针时,需要首先指定类的一个对象,然后,通过对象来引用指针所指向的成员。
类对象名.*指向非静态数据成员的指针
类对象指针->*指向非静态数据成员的指针

2.指向类成员函数的指针

//定义和赋值(和类相关)
函数返回类型名 (类名::*函数指针名)(参数列表) = &类名::成员函数名
//使用(和对象相关)
//由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定类的一个对象,然后,通过对象来引用指针所指向的成员。
(类对象名.*指向非静态成员函数的指针)(参数列表)
(类对象指针->*指向非静态成员函数的指针)(参数列表)

示例

class Stu
{
public:
	Stu(string sn,int ia):
	    name(sn),age(ia)
	{
	}
	void print()
	{
		cout<<name<<"---"<<age<<endl;
	}
public:
	string name;
	int age;
};
int main()
{
	int a=100;
	int *p = &a;
	Stu s1("zhang",14);
	Stu s2("lili",19);
	Stu * pp = new Stu("wojiushiwo",30);
	int Stu::*pa = &Stu::age;  //pa是指向类成员变量age的指针变量
	string Stu::*pb = &Stu::name;  //pb是指向类成员变量name的指针变量
	cout<<s1.name<<s2.name<<endl;  //值:zhanglili
	cout<<s1.*pa<<"---"<<s1.*pb<<endl;  //值: 14---zhang 
	void (Stu::*fa)()=&Stu::print;  //fa是指向类成员函数的函数指针
	(s1.*fa)();   //值:zhang---14
	(s2.*fa)();   //值:lili---19
	(pp->*fa)(); //值:wojiushiwo---30
	return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • C语言调用Python代码的方法

    C语言调用Python代码的方法

    这篇文章主要介绍了C语言调用Python代码的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C语言实现万年历源码

    C语言实现万年历源码

    这篇文章主要为大家详细介绍了C语言实现万年历源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C语言字符串常用处理函数小结

    C语言字符串常用处理函数小结

    C语言中有很多内置的字符串处理函数,这些函数都在<string.h>头文件中声明,本文给大家介绍C语言字符串常用处理函数小结,感兴趣的朋友一起看看吧
    2023-11-11
  • C语言中函数的声明、定义及使用的入门教程

    C语言中函数的声明、定义及使用的入门教程

    这篇文章主要介绍了C语言中函数的声明、定义及使用的入门教程,重点讲述了main函数的相关知识,需要的朋友可以参考下
    2015-12-12
  • C语言函数传递数组和传递地址的区别你知道吗

    C语言函数传递数组和传递地址的区别你知道吗

    这篇文章主要介绍了C语言中数组作为函数的参数以及返回值的使用简单入门,这里以一维数组作为基本条件进行例子讲解,需要的朋友可以参考下
    2021-09-09
  • 深入理解c++模板中的class与typename

    深入理解c++模板中的class与typename

    在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?下面这篇文章主要给大家介绍了关于c++模板中class与typename的相关资料,需要的朋友可以参考下。
    2017-07-07
  • c++制作的时间函数类

    c++制作的时间函数类

    本文给大家分享的是一个个人使用C++编写的时间函数类,主要是实现了类的定义和调用,相比较来说还算比较复杂的时间类了,推荐给小伙伴们,有需要的朋友可以参考下。
    2015-03-03
  • C语言中回调函数的含义与使用场景详解

    C语言中回调函数的含义与使用场景详解

    这篇文章主要为大家详细介绍了C语言中回调函数的含义与使用场景,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++选择文件夹代码的封装

    C++选择文件夹代码的封装

    这篇文章主要介绍了C++选择文件夹代码的封装,实例展示了将选择文件夹功能代码封装为一个类并对其进行实例化调用的过程,对于学习C++程序设计有不错的参考价值,需要的朋友可以参考下
    2014-10-10
  • c++静态局部变量和静态函数示例

    c++静态局部变量和静态函数示例

    这篇文章主要介绍了c++静态局部变量和静态函数示例,需要的朋友可以参考下
    2014-04-04

最新评论