【问题标题】:Inheritance and Function Arguments继承和函数参数
【发布时间】:2021-08-31 22:29:15
【问题描述】:

我的书表面上涵盖了面向对象领域的许多测试主题,我需要一些解释和提示,哪本书涵盖了这些主题。

有一道试题:

#include <iostream>

class A {
public:
    virtual void f(int n=2) {// takes the argument value from here
        std::cout << n+1 << " in A";
    }
};
class B : public A {
private:
    virtual void f(int n=3) {
        std::cout << n - 1 << " in B";// this class is used
    }
};

int main() {
    A* p = new B;
    p->f();
}

输出: 1 in B,即来自A 的参数馈入B

我明白为什么要创建class B 的对象。我不明白为什么将 2 的值作为参数。我还检查了如果变量的名称被更改,是否会采用类 A 的值——它仍然被使用。

欢迎阅读有关此类 OOP 主题的任何文献或教育视频。

【问题讨论】:

  • 因为pA *,而不是B *。虚拟性只影响选择了哪个函数,而不影响它的参数。
  • 如果你得到了你需要的答案,请接受答案,它会给你声誉并将问题标记为已解决。如果答案不准确,请随时要求澄清

标签: c++ oop inheritance


【解决方案1】:

你有更多信息在这里:Can virtual functions have default parameters?

这个想法是“p的静态类型是A所以它将使用A::f的默认值”

恕我直言,这是一个细节,如果您正在学习 OOP,这可能不是您应该关注的重点,但是您确实看到了它真是太好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多