【发布时间】: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 主题的任何文献或教育视频。
【问题讨论】:
-
因为
p是A *,而不是B *。虚拟性只影响选择了哪个函数,而不影响它的参数。 -
如果你得到了你需要的答案,请接受答案,它会给你声誉并将问题标记为已解决。如果答案不准确,请随时要求澄清
标签: c++ oop inheritance