![](/img/trans.png)
[英]How to register a derived class member function pointer with a base class
[英]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.