所以我的教授喜欢用我们应该弄清楚的论文上的代码来测试我们。我不打算发布代码,因为我不是在寻找答案,只是他用来混淆我们的一件事是当他初始化一个类的对象时,然后初始化另一个类的指针指向上述对象。它混淆了我的地狱,这是一个特殊的问题,我不知道如何搜索它。例如:
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吗?
当指针来自一个类但指向另一个类的对象时,指针会做什么?我知道这个问题之前可能已经得到了回答,但我无法在任何地方找到它,所以我甚至会感谢你被引导回答。非常感谢你。
答案 0 :(得分:0)
行class E: public D
表示任何E
都是D
。因此,E
的任何地址都可以存储到指向D
的指针中。
答案 1 :(得分:0)
答案在于班级宣言:
class E : public D
E是D的子类,这意味着类型E的任何对象也是类型D的对象。因此,可以将类型E的实例分配给类型D的指针。但是,当访问该类型时,指针,你只能访问D类的成员,而不能访问E类,因为指针类型仍然是D.为了访问特定于E类的任何方法,你需要转换对象类型。