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

目录
  • 一.指向普通变量和函数的指针
  • 二.指向类成员的指针
    • 1.指向类数据成员的指针
    • 2.指向类成员函数的指针
    • 示例
  • 总结

序言:在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;
}

总结

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

(0)

相关推荐

  • C++指针与数组:指针详解

    目录 一. What(什么是指针) 1. 地址初了解 2. 指针概念 3. 指针与指针变量 二. Why(为什么要有指针) 三. How(如何使用指针) 1. 基本定义 2. 取地址操作符 & 3. 解引用操作符 * 4. 结构体指针 5. 多级指针 6.指针变量的命名规范 四. 我对指针的一些理解 总结 本文主要介绍C语言中指针的基本概念与用法,本博文从零开始讲解指针,只要你了解基本的C语法,相信你看完本文后一定会有所收获. 一. What(什么是指针) 1. 地址初了解 要搞明白什么是指针,

  • c++基础学习之如何区分引用和指针

    目录 前言 1.引用 1.1引用的概念 1.2引用的定义 1.3引用与const 1.4引用的使用场景 2.指针 2.1概念 2.2获取对象的地址 2.3利用指针访问对象 2.3空指针 2.4野指针 2.4.1概念: 2.4.2野指针的产生: 2.5各个指针类型的含义 2.6 void* 指针 2.7指向指针的指针 2.8指针与const 3.指针和引用的区别 总结 前言 对于我刚学c++的时候,最令我头疼的是引用和指针,老是区分不了它们,那么今天笔者将我的学习到的笔记总结出来,让大家少走一些坑

  • 简明的C++函数指针学习教程

    定义 每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针. 语法 数据类型 (*指针变量名)(参数表): int (*myFunc)(double b, int c); 说明 函数指针的定义形式中的数据类型是指函数的返回值的类型. 区分下面两个语句: int (*p)(int a, int b);//p是一个指向函数的指针变量,所指函数的返回值类型为整型 int *p(int a, int b);//p是函数名,此函数的返回值类型为整型指针 指向函数的指针变量不

  • C++指针学习详解

    目录 指针的基本概念 一.指针变量的定义和使用 二.指针所占的空间内存 1.空指针 野指针 2. const修饰指针 利用指针访问数组中的每个元素. 总结 指针的基本概念 指针的作用:可以通过指针间接的访问内存 内存的编号从0开始记录,一般使用十六进制数字表示. 可以使用指针变量保存地址 指针=地址(简单理解) 一.指针变量的定义和使用 指针变量定义语法: 数据类型* 变量名 #include<iostream> using namespace std; int main()//主函数 {//

  • C++学习之移动语义与智能指针详解

    移动语义 1.几个基本概念的理解 (1)可以取地址的是左值,不能取地址的就是右值,右值可能存在寄存器,也可能存在于栈上(短暂存在栈)上 (2)右值包括:临时对象.匿名对象.字面值常量 (3)const 左值引用可以绑定到左值与右值上面,称为万能引用.正因如此,也就无法区分传进来的参数是左值还是右值. const int &ref = a;//const左值引用可以绑定到左值 const int &ref1 = 10;//const左值引用可以绑定到右值 (4)右值引用:只能绑定到右值不能绑

  • 深入学习C++智能指针之shared_ptr与右值引用的方法

    目录 1. 介绍 2. 初始化方法 2.1 通过构造函数初始化 2.2 通过拷贝和移动构造函数初始化 2.3 通过 std::make_shared 初始化 2.4 通过 reset 方法初始化 3. 获取原始指针 4. 指定删除器 5. 参考链接 1. 介绍 在 C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露.解决这个问题最有效的方法是使用智能指针(smart pointer).智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用

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

    目录 一.指向普通变量和函数的指针 二.指向类成员的指针 1.指向类数据成员的指针 2.指向类成员函数的指针 示例 总结 序言:在C++中,可以定义一个指针,使其指向类成员函数或或成员函数,然后通过指针来访问类的成员,这包括指向属性成员的指针和指向成员函数的指针. 一.指向普通变量和函数的指针 指向普通变量的指针 int a=100; int *p = &a; 指向函数的指针(即函数指针) int(*p)(int, int); 这条语句的理解:定义了一个指向函数的指针变量p,首先它是一个指针变量

  • C++获取类的成员函数的函数指针详解及实例代码

    C++获取类的成员函数的函数指针详解 用一个实际代码来说明. class A { public: staticvoid staticmember(){cout<<"static"<<endl;} //static member void nonstatic(){cout<<"nonstatic"<<endl;} //nonstatic member virtualvoid virtualmember(){cout<

  • C++中函数指针详解及代码分享

    函数指针 函数存放在内存的代码区域内,它们同样有地址.如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,如同数组的名字就是数组的起始地址. 1.函数指针的定义方式:data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn); c语言函数指针的定义形式:返回类型 (*函数指针名称)(参数类型,参数类型,参数类型,-); c++函数指针的定义形式:返回类型 (类名

  • C++ 中的this指针详解及实例

    C++ this 指针详解 学习 C++ 的指针既简单又有趣.通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的. 正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址. this指针是类的一个自动生成.自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对象. 全局仅有一个this指针,当一个对

  • C/C++静态类和this指针详解及实例代码

     C/C++静态类和this指针详解 1.静态类 C++的静态成员不仅可以通过对象来访问,还可以直接通过类名来访问. class CBook{ public: static double price;//需要通过类外来进行初始化 } int main(void){ CBook book; book.price;//通过对象来访问 CBook::price//通过类名来访问 return 0; } 静态成员变量 对应静态成员有以下几点需要注意: (1)静态数据成员可以是当前类的类型,而其他数据成员

  • C++ 指向类成员的指针

    前面曾写过一篇恼人的函数指针(一),总结了普通函数指针的声明.定义以及调用,还有函数指针数组,函数指针用作返回值等.但是作为C++的研读,我发现我漏掉了一个最重要的内容,就是指向类成员的指针,这里将做相应补充(相关代码测试环境为vs 2010). 指向类成员的指针总的来讲可以分为两大类四小类(指向数据成员还是成员函数,指向普通成员还是静态成员),下面一一做介绍: 一.指向类的普通成员的指针(非静态) 1.指向类成员函数的指针 简单的讲,指向类成员函数的指针与普通函数指针的区别在于,前者不仅要匹配

  • C语言指针详解

    前言:复杂类型说明     要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧: int p; //这是一个普通的整型变量   int *p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所

  • C++智能指针详解

    目录 一. unique_ptr独占指针 特点 创建方式 传递方式 简单使用 隐藏危险 二. shared_ptr 计数指针 特点 传递方式 隐藏危险 三. weak_ptr 优缺点: 智能指针由原始指针的封装,优点是可以自动分配内存,不用担心内存泄漏问题. 用于解决独占/共享所有权指针的释放,传输等问题. 但是没有原始指针方便. 一. unique_ptr独占指针 特点 都是围绕独占展开 特点一: 如其名,独占.也就是说同一个内存空间同时只能有一个指针来管理. int* pi = new in

  • C++ boost scoped_ptr智能指针详解

    目录 一.智能指针-唯一所有者 二.接口类分析 一.智能指针-唯一所有者 boost::scoped_ptr 是一个智能指针,它是动态分配对象的唯一所有者. boost::scoped_ptr 无法复制或移动.此智能指针在头文件 boost/scoped_ptr.hpp 中定义. 二.接口类分析 scoped_array 分析 scoped_array 的类部分原始代码如下: template<class T> class scoped_array // noncopyable { priva

  • C++ Boost PointerContainer智能指针详解

    目录 一.提要 二.智能指针Boost.PointerContainer 三.练习 一.提要 在 C++11 中,Boost.PointerContainer是另一个智能指针,一般是用来生成集合数据的,本文阐述这种指针的特点和用法. 二.智能指针Boost.PointerContainer 库 Boost.PointerContainer 提供专门用于管理动态分配对象的容器.例如,在 C++11 中,您可以使用 std::vector<std::unique_ptr<int>> 创

随机推荐