这是C ++的一部分,让我感到困惑。 考虑这个基本的继承和多态的例子。下面的每个类都有虚函数,并在main函数中调用,但输出让我感到困惑。
首先,我理解A& r1 = b
是对之前创建的B对象的引用,它应该在B中调用测试函数,因为它们都是虚拟的。根据我所学到的,将调用最派生/最新的函数。
是的,它调用最新函数,但我关注的是参数,在输出中显示10
,但是类B中测试函数的默认参数是50
。同样适用于A& r2 = c
,C中的测试函数没有默认参数,而是从类B获取测试函数中的参数。
C中的测试函数也是私有的,是不是如果私有你只能在类中调用它们?
如果有人能在这方面给我启发,我非常感激。谢谢
#include <iostream>
using namespace std;
class A {
public:
virtual void test(int n = 10)
{
cout << "class A test(" << n << ")" << endl;
}
};
class B: public A {
public:
virtual void test(int n = 50)
{
cout << "class B test(" << n << ")" << endl;
}
};
class C: public B {
public:
//no public
private:
virtual void test()
{
cout << "class C test()" << endl;
}
virtual void test(int n)
{
cout << "class C test(" << n << ")" << endl;
}
};
int main () {
A a;
B b;
C c;
A& r1 = b;
A& r2 = c;
B& r3 = c;
r1.test();
r2.test();
r3.test();
}
输出
class B test(10)
class C test(10)
class C test(50)