I see an article about this issue. There is a code:
Also i tried without virtual keyword, it also gives same result. But i don't understand why it is so.Code:class A { public: virtual void foo(int n = 3) { std::cout << "A::foo(" << n << ")" << endl; } }; class B : public A { public: virtual void foo() { std::cout << "B::foo" << endl; } }; int main() { A* a = new B; a->foo(); // prints A::foo("3"); }
How can A see the foo() function?Code:class A { public: void foo(int n = 3) { std::cout << "A::foo(" << n << ")" << endl; } }; class B : public A { public: void foo() { std::cout << "B::foo" << endl; } }; int main() { A* a = new B; a->foo(); A as; as.foo(); }
I can call as.foo() not as.foo(3); it doesnt give me error but it prints A::foo("3") but i didnt call a.foo(int n = 3);
What does compiler do for such a situation when i inherite a class.
A can see foo() function; is this normal? Because i know that function name resolution is only legal for scope. So A mustnt see foo() function. But it sees.
Can anyone please explain this.
Thanks.


Reply With Quote
