I got a little bit confused with the topic of virtual functions in c++.
Is there a flowchart that summarize all possible cases?

for example:

```
    class A {
       public:
          virtual void f(const int i) { cout << "A::f" << endl; }
    };

    class B : public A {
       public:
          // Hide A's f with new implementations
          void f() { cout << "B::f" << endl; }
    };

    class C : public B {
       public:
          void f() { cout << "C::f" << endl; }
    };
class D : public B { public:
    void f(const int i) { cout << "D::f" << endl; }
};

    void main() {
       D d;
       C c;
       B* pb = &c;
       pb->f();
       A* pa = &d;
       A* paa = &c;
       pa->f(1);
       paa->f(1); //in here C::f would be invoked?
    }

```

In this case, `B` hides `A::f`, and `C` has an override for `B::f` with the same signature.

Would `pb->f()` invoke `C::f`? 
Would `pa->f(1)` invoke `A::f`?

I ask it to know if `B::f` is still considered virtual so its derivative classes can override it, though it hides `A::f`.

As well as If C::f is considered virtual by default?