繁体   English   中英

如何基于派生类的指针找到成员函数?

[英]How is a member function found based on this pointer of the derived class?

考虑以下示例:

struct B1 {
    void f() {
        this->g();
        std::cout << this << std::endl;
    }
    void g() {
        std::cout << "B1::g" << std::endl;
    }
};

struct B2 {
    void f() {
        this->g();
        std::cout << this << std::endl;
    }
    void g() {
        std::cout << "B2::g" << std::endl;
    }
};

struct C: B1, B2 {
    void f() {
        B1::f();
        B2::f();
        std::cout << this << std::endl;
    }
    void g() {
        std::cout << "C::g" << std::endl;
    }
};

int main() {
    C c;
    c.f();
    return 0;
}

对我来说,输出是:

B1::g
0x7fffa11436b7
B2::g
0x7fffa11436b7
0x7fffa11436b7

让我们专注于B2::f 从输出中可以看到,在B2::f内部, this指向类型C的对象的开头。 那么, this->g()如何正确解析为B2::g()

这里没有虚拟函数。 因此,您可以从B1::f调用g成员函数, B1::f 定义 B1::g调用。 事情的确会去不同,如果g是虚拟的,因为那时所有f功能会打电话C::g (只是尝试更换void g()virtual void g()在所有3层结构)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM