栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++类和对象--指向类成员的指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++类和对象--指向类成员的指针

C++类和对象--指向类成员的指针
  • 1. 指向普通变量和函数的指针
  • 2. 指向类数据成员的指针
    • 2.1 定义
    • 2.2 赋值&初始化
    • 2.3 解引用
    • 2.4 案例
  • 3. 指向类成员函数的指针
    • 3.1 定义
    • 3.2 赋值&初始化
    • 3.3 解引用
    • 3.4 案例
    • 3.5 应用之实现隐蔽接口
  • 4. 指向类静态成员的指针

1. 指向普通变量和函数的指针
#include 
using namespace std;
void func(int a)
{
    cout< 

2. 指向类数据成员的指针 2.1 定义
<数据类型><类名>::*<指针名>
2.2 赋值&初始化
<数据类型><类名>::*<指针名>[=&<类名>::<非静态数据成员>]

指向非静态数据成员的指针在定义时必须和类相关联,在使用时必须和具体的对象关联。

2.3 解引用

由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定类的一个对象,然后,通过对象来引用指针所指向的成员。

<类对象名>.*<指向非静态数据成员的指针>
<类对象指针>->*<指向非静态数据成员的指针>
2.4 案例
#include 
using namespace std;
class Student
{
public:
    Student(string n, int nu):name(n),num(nu){}
    string name;
    int num;
};
int main()
{
    Student s("zhangsan",1002);
    Student s2("lisi",1001);
    //string *ps = &s.name;//指向非静态数据成员的指针在定义时必须和类相关联
    //cout<< *ps<*ps< 

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

定义一个指向非静态成员函数的指针必须在三个方面与其指向的成员函数保持一致:参数列表要相同、返回类型要相同、所属的类型要相同。

3.1 定义
<数据类型>(<类名>::*<指针名>)(<参数列表>
3.2 赋值&初始化
<数据类型>(<类名>::*<指针名>)(<参数列表>)[=&<类名>::<非静态成员函数>]
3.3 解引用

由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定类的一个对象,然后,通过对象来引用指针所指向的成员。

(<类对象名>.*<指向非静态成员函数的指针>)(<参数列表>)
(<类对象指针>->*<指向非静态成员函数的指针>)(<参数列表>)
3.4 案例
#include 
using namespace std;
class Student
{
public:
    Student(string n, int nu):name(n),num(nu){}
    void dis()
    {
    cout<<"name "<*pf)();
    return 0;
}

3.5 应用之实现隐蔽接口

用指向类成员函数的指针,实现更加隐蔽的接口。

#include 
using namespace std;
class Widget
{
public:
    Widget()
    {
        fptr[0] = &Widget::f;
        fptr[1] = &Widget::g;
        fptr[2] = &Widget::h;
        fptr[3] = &Widget::i;
    }
    void select(int idx, int val)
    {
        if(idx<0 || idx>cnt) return;
        (this->*fptr[idx])(val);
    }
    int count()
    {
        return cnt;
    }
private:
    void f(int val){cout<<"void f() "< 

4. 指向类静态成员的指针
  • 指向类静态数据成员的指针
    指向静态数据成员的指针的定义和使用与普通指针相同,在定义时无须和类相关联,在使用时也无须和具体的对象相关联。
  • 指向类静态成员函数的指针
    指向静态成员函数的指针和普通指针相同,在定义时无须和类相关联,在使用时也无须和具体的对象相关联。
#include 
using namespace std;
class A
{
public:
    static void dis();
    static int data;
};
void A::dis()
{
    cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号