C++ Primer 5th笔记(chap 19 特殊工具与技术)类成员指针

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 19 特殊工具与技术)类成员指针相关的知识,希望对你有一定的参考价值。

1. 成员指针( pointer to member)

指可以指向类的非静态成员的指针。

  • 成员指针指示的是类的成员, 而非类的对象。
  • 类的静态成员不属于任何对象, 因此无须特殊的指向静态成员的指针
  • 指向静态成员的指针与普通指针没有什么区别。

成员指针的类型囊括了类的类型以及成员的类型。 当初始化一个这样的指针时, 我们令其指向类的某个成员, 但是不指定该成员所属的对象;

class Screen {
public:
    typedef std::string::size_type pos;
    char get_cursor() const { return contents[cursor]; }
    char get() const;
    char get(pos ht, pos wd) const;
private:
    std::string contents;
    pos cursor;
    pos height, width;
};

1.1 数据成员指针

eg. 一个指向 Screen 类的 const string 成员的指针
/ / pdata 可以指向一个常量 ( 非常量 ) Screen 对象的 string 成员
const string Screen::*pdata;

初始化一个成员指针
pdata = &Screen::contents;

声明成员指针:
auto pdata = &Screen::contents;

1.2 使用数据成员指针

Screen myScreen, *pScreen = &myScreen;
// .*解引用 pdata 以获得 myScreen 对象的 contents 成员
auto s = myScreen.*pdata;
// -> 解引用pdata 以获得 pScreen 对象的 contents 成员
s = pScreen->*pdata;

1.3 返回数据成员指针的函数

最好定义一个函数, 令其返回值是指向该成员的指针

class Screen {
public:
    // data是一个静态成员, 返回一个成员指针
    static const std::string Screen::*data()
        { return &Screen::contents; }
}
 
// 我们调用data函数时, 将得到一个成员指针
// data()返回一个指向Screen类的contents成员的指针
const string Screen::*pdata = Screen::data();
 
// pdata指向Screen类的成员而非实际数据, 要想使用pdata必须把它绑定到Screen类型的对象上
auto s = myScreen.*pdata;

以上是关于C++ Primer 5th笔记(chap 19 特殊工具与技术)类成员指针的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 19 特殊工具与技术)malloc 函数与 free 函数

C++ Primer 5th笔记(chap 19 特殊工具与技术)控制内存分配

C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI

C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid

C++ Primer 5th笔记(chap 19 特殊工具与技术)定位 new 表达式

C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针