指向E类成员的D类指针

时间:2014-09-19 22:59:35

标签: c++ class pointers inheritance

所以我的教授喜欢用我们应该弄清楚的论文上的代码来测试我们。我不打算发布代码,因为我不是在寻找答案,只是他用来混淆我们的一件事是当他初始化一个类的对象时,然后初始化另一个类的指针指向上述对象。它混淆了我的地狱,这是一个特殊的问题,我不知道如何搜索它。例如:

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吗?

当指针来自一个类但指向另一个类的对象时,指针会做什么?我知道这个问题之前可能已经得到了回答,但我无法在任何地方找到它,所以我甚至会感谢你被引导回答。非常感谢你。

2 个答案:

答案 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类的任何方法,你需要转换对象类型。