我正在阅读Don Clugston 在 Codeproject 上的一篇文章。这是一篇漂亮的文章,很有名。在下面的代码片段中,我发现一个特定的概念非常难以理解:
class A {
public:
virtual int Afunc() { return 2; };
};
class B {
public:
int Bfunc() { return 3; };
};
// C is a single inheritance class, derives only from A
class C: public A {
public:
int Cfunc() { return 4; };
};
// D uses multiple inheritance
class D: public A, public B {
public:
int Dfunc() { return 5; };
};
该片段后面是以下段落:
假设我们为 C 类创建了一个成员函数指针。在这个例子中,Afunc 和 Cfunc 都是 C 的成员函数,所以我们的成员函数指针可以指向 Afunc 或 Cfunc。但是 Afunc 需要一个指向 C::A(我称之为 Athis)的 this 指针,而 Cfunc 需要一个指向 C(我称之为 Cthis)的 this 指针。编译器编写者通过一个技巧来处理这种情况:他们确保 A 在物理上存储在 C 的开头。这意味着 Athis == Cthis。我们只有一个需要担心,世界一切都很好。
我想了解的唯一一件事是上一段中粗体和斜体的行。
我不完全理解Afunc 需要一个指向 C::A的指针,而Cfunc 需要一个指向 C 的指针是很自然的。
任何帮助,将不胜感激。