C++ 指向E类成员的D类指针

C++ 指向E类成员的D类指针,c++,class,pointers,inheritance,C++,Class,Pointers,Inheritance,所以我的教授喜欢用我们应该弄明白的论文上的代码来测试我们。我不会发布代码,因为我不是在寻找答案,他只是在初始化一个类的对象,然后初始化另一个类的指针以指向前面提到的对象时让我们感到困惑。它把我弄糊涂了,这是一个如此特殊的问题,我不知道如何去寻找它。例如: class A { // etc } ... class D { void fy(etc, etc, etc) {} // etc } class E: public D { void fy(etc, etc, etc) {} //

所以我的教授喜欢用我们应该弄明白的论文上的代码来测试我们。我不会发布代码,因为我不是在寻找答案,他只是在初始化一个类的对象,然后初始化另一个类的指针以指向前面提到的对象时让我们感到困惑。它把我弄糊涂了,这是一个如此特殊的问题,我不知道如何去寻找它。例如:

class A {

// etc
}

...


class D {
void fy(etc, etc, etc) {}
// etc
}


class E: public D {
void fy(etc, etc, etc) {}
// etc
}

main() {
 E e
 D *d = &e
 d->fy(15,25)
 //everything else
d->fy是否执行d或E的fy功能?如果D的fy函数是虚拟的,那么它会做E吗


当指针来自一个类但指向另一个类的对象时,它到底做了什么?我知道这个问题以前可能已经被回答过了,但我在任何地方都找不到,所以我甚至希望能直接找到答案。非常感谢。

行class E:public D表示任何E都是D。因此,E的任何地址都可以存储到指向D的指针中。

答案在于类声明:

class E : public D

E是D的子类,这意味着E类型的任何对象也是D类型的对象。因此,E类型的n实例可以分配给D类型的指针。但是,当访问该指针时,您只能访问D类的成员,而不能访问E类,因为指针类型仍然是D。为了访问特定于E类的任何方法,您需要强制转换对象类型。

为了响应您的编辑,请查看Liskov替换原则,E是D,因此您可以使用E*并将其存储在D*中。