【发布时间】:2013-11-13 05:10:41
【问题描述】:
给定以下代码片段,函数调用有什么区别?什么是函数隐藏?什么是函数覆盖?它们与函数重载有什么关系?两者有什么区别?我在一个地方找不到对这些的详细描述,所以我在这里询问,以便我可以整合信息。
class Parent {
public:
void doA() { cout << "doA in Parent" << endl; }
virtual void doB() { cout << "doB in Parent" << endl; }
};
class Child : public Parent {
public:
void doA() { cout << "doA in Child" << endl; }
void doB() { cout << "doB in Child" << endl; }
};
Parent* p1 = new Parent();
Parent* p2 = new Child();
Child* cp = new Child();
void testStuff() {
p1->doA();
p2->doA();
cp->doA();
p1->doB();
p2->doB();
cp->doB();
}
【问题讨论】:
-
这闻起来像家庭作业或类似的东西。我不知道你为什么要问一个如此广泛的问题。
-
@kerrek-sb 我在网上找不到比较这些的解释(这是我通常看的地方,其他人可能也会这样做)。他们有一个或另一个的解释,但不是两者都有,我想把一些容易参考的东西放到网上。感谢您对访问说明符的了解。
-
@karadoc 不,这只是我发现的东西。我找到的解释解释了一个或另一个,但不要对它们进行比较,这就是我想要的。
-
@karadoc,FWIW,我正要发布同样的问题,不,这不是家庭作业。我很久没上大学了。感谢您提出这个 Jed,尽管不幸的是我仍然不明白 virtual 关键字的用途,除非您尝试使用纯虚函数创建抽象基类。除此之外,从实际的角度来看,我看不到“虚拟”的作用,因为我只能隐藏该功能。
-
如果这听起来像是一项家庭作业,那就没问题了。我没有做任何作业,这个确切的问题出现在我的脑海中,我用谷歌搜索,发现了这个很棒的资源。我想许多其他人也处于同样的境地。立即找到答案非常有用。
标签: c++ inheritance virtual-functions overriding method-hiding