C ++中的点星号运算符 [英] dot asterisk operator in c++

查看:166
本文介绍了C ++中的点星号运算符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在那里,如果要做什么?

is there, and if, what it does?

.*


推荐答案

是的。

例如,

struct A
{
    int a;
    int b;
};

int main()
{
    A obj;
    int A::* ptr_to_memb = &A::b;

    obj.*ptr_to_memb = 5;

    ptr_to_memb = &A::a;

    obj.*ptr_to_memb = 7;

    // Both members of obj are now assigned
}

在这里, A 是一个结构,而 ptr_to_memb 是一个指向 int A 的$ c>成员。 。* 组合了一个 A 实例和一个指向成员的指针,以形成一个左值表达式,该表达式引用了给定 A 实例 obj

Here, A is a struct and ptr_to_memb is a pointer to int member of A. The .* combines an A instance with a pointer to member to form an lvalue expression referring to the appropriate member of the given A instance obj.

指向成员的指针可以是指向数据成员或函数成员的指针,甚至会为虚拟函数成员做正确的事。

Pointer to members can be pointers to data members or to function members and will even 'do the right thing' for virtual function members.

例如该程序输出 f(d)= 1

struct Base
{
    virtual int DoSomething()
    {
        return 0;
    }
};

int f(Base& b)
{
    int (Base::*f)() = &Base::DoSomething;
    return (b.*f)();
}

struct Derived : Base
{
    virtual int DoSomething()
    {
        return 1;
    }
};

#include <iostream>
#include <ostream>

int main()
{
    Derived d;
    std::cout << "f(d) = " << f(d) << '\n';
    return 0;
}

这篇关于C ++中的点星号运算符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆