了解虚函数

时间:2015-07-29 21:34:07

标签: c++ virtual

这是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)

0 个答案:

没有答案