美文网首页
C++指针与成员

C++指针与成员

作者: 编程小世界 | 来源:发表于2019-06-22 18:46 被阅读0次

先看一个例子:

//统一的接口

include <iostream>

using namespace std;

struct Point{

intplus(doublex,doubley){returnx + y;}intminus(doublex,doubley){returnx - y;}intmul(doublex,doubley){returnx*y;}intdiv(doublex,doubley){returnx/y;}

};

int oper(Point & point, int (Point::*pfun)(double x, double y),

doublex, double y){return(point.*pfun)(x, y);

}

int main()

{

Point pt;int(Point::*pfun)(double,double);pfun = &Point::plus;cout<

}

再看一个例子:

//更加隐蔽的接口

include <iostream>

using namespace std;

class Widget{

public:

Widget(){    pf[0] = &Widget::f;    pf[1] = &Widget::g;    pf[2] = &Widget::h;    pf[3] = &Widget::i;}intgetCount(){returncnt;}voidselect(intval,intsec){if(sec<0&& sec>3)return;    (this->*pf[sec])(val);}

private:

voidf(intval){cout<<"void f()"<

};

int main()

{

Widget w;w.select(100,2);return0;

}

/指向静态成员的指针 /

//指向静态成员的指针的定义和使用与普通指针相同,在定义时无须和类相关联

//在使用时也无需和具体对象相关联

//声明 <数据类型>*<指针名>

//初始化 <数据类型>*<指针名> [=& <类名>::<静态数据成员>]

//解引用 (*<指向静态数据成员的指针>)

//声明 <数据类型>(*<指针名>)(<参数列表>)

//初始化 <数据类型>(*<指针名>)(<参数列表>) [=&<类名>::<静态成员函数>]

//解引用 (*<指向静态成员函数的指针>)(<参数列表>

//和普通函数指针,唯一的区别是: 在初始化时,&classname::member,要加上类名限定

include <iostream>

using namespace std;

class A{

public:

staticvoiddis();staticintdata;

};

void A::dis(){

cout<

}

int A::data = 100;

int main()

{

int*pa = &A::data;cout<<*pa<

}

/指向类成员函数的指针 /

//定义一个指向非静态成员函数的指针必须在三个方面与其指向的成员函数保持一致

//参数列表相同,返回类型要相同,所属的类型(类名)要相同

//由于类不是运行时存在的对象,因此,在使用这类指针时,需要首先指定类的一个对象

//然后,通过对象来引用指针所指的成员

//声明 <数据类型>(<类名>::*<指针名>)(<参数列表>)

//初始化 <数据类型>(<类名>::*<指针名>)(<参数列表>) [=&<类名>::<非静态成员函数>]

//解引用 (<类对象名>.*<指向非静态成员函数的指针>)(<参数列表>)

// (<类对象指针>->*<指向非静态成员函数的指针>)(<参数列表>)

include <iostream>

using namespace std;

class Student{

public:

Student(stringn,intnu): name(n), num(nu){}voiddis(){cout<<"name: "<

private:

stringname;intnum;

};

int main()

{

Student s("zhangtong",30);Student s2("lidan",26);Student *ps = new Student("zhaolanni",35);void (Student::*pf)() = &Student::dis;(s.*pf)();//name: zhangtongnum:30(s2.*pf)();//name: lidannum:26(ps->*pf)();//name: zhaolanninum:35return0;

}

/指向类数据成员的指针 /

//是类层面的指针,而不是对象层面的指针

//跟普通意义上的指针用法有很大的差别

//定义格式上,必须有类别限定 type className::*pointName

//初始化,也必须有类名限定&className::member

//并且定义的指针,只有通过具体的对象或对象指针才可以调用

//声明 <数据类型><类名>::*<指针名>

//初始化 <数据类型><类名>::*<指针名> [=& <类名>::<非静态数据成员>]

//解引用 <类对象名>.<指向非静态数据成员的指针> <类对象指针>-> <指向非静态数据成员的指针>

include <iostream>

using namespace std;

class Student{

public:

Student(stringn,intnu): name(n), num(nu){}stringname;intnum;

};

int main()

{

Students("zhangtong",29);Students2("lisa",43);stringStudent::*pn = &Student::name;cout<*pn<

}

看我主页简介免费C++学习资源,视频教程、职业规划、面试详解、学习路线、开发工具

每晚8点直播讲解C++编程技术。非常感谢大家的关注

相关文章

  • 1.2.09_C++ 指向类的指针

    C++ 类 & 对象 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算...

  • C++ 指向类的指针

    原文地址:C++ 指向类的指针 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成...

  • C++指针与成员

    先看一个例子: //统一的接口 include using namespace std; struct Point...

  • [C++之旅] 16 对象指针/对象成员指针/this指针

    [C++之旅] 16 对象指针/对象成员指针/this指针 一、对象指针 对象指针指向堆中地址 对象指针指向栈中地...

  • 1.2.08_C++ this 指针

    C++ 类 & 对象 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员...

  • (三)C++中的静态成员、this指针、友元函数与运算符重载

    C++中的静态成员与this指针 一、静态成员 1、static 关键字 静态属性只能在全局范围内进行初始化赋值 ...

  • c++中类的成员函数指针

      在c++中,使用函数指针的时候,我一般使用静态成员函数的指针。另外,还有一种普通成员函数的指针,我用的比较少。...

  • C++ this指针

    C++中this指针的理解 1、成员变量和入参重名时,如果不想修改名字,需要使用this指针引用成员变量。2、静态...

  • c++ this 指针

    概念 this指针是c++程序中的一个关键字,this指向当前对象,通过this指针可以访问当前对象的所有成员。 ...

  • C++类成员函数指针

    函数指针可以写成return_type (func_name)(args...),由于类静态函数和全局函数类似,可...

网友评论

      本文标题:C++指针与成员

      本文链接:https://www.haomeiwen.com/subject/mgvvqctx.html