Re: Multiple inheritance virtual abstract method disambiguation
On Aug 15, 5:59 am, Seungbeom Kim <musip...@bawi.org> wrote:
On 2011-08-13 19:45, xKubo wrote:
Or you can qualify the function call with the class name:
x.ITest::Close();
x.ITest2::Close();
Sorry, this will give link errors, unless ITest{,2}::Close() are
explicitly defined (despite they are pure virtual). I meant:
x.XITest1::Close();
x.XITest2::Close();
(based upon the code posted by Gerhard Menzl).
XITest{1,2}::Close() override ITest{,2}::Close(), respectively,
but they are not really meant to be overridden further.
The meaning of the x.ITest::Close() is to call ITest::Close explicitly
(not as a virtual method). I tried it and if I add implementation
of the pure virtual method ITest::Close() like this:
struct ITest
{
virtual void Close() = 0
{
cout << "XX";
}
};
your line calls this method regardless of the fact that it is
overriden in class X. I think this is in accordance with C++ standard.
Indeed. Except that you cannot add a definition to the declaration of
a pure virtual function like that; there's no syntax supporting such.
You should write:
struct ITest
{
virtual void Close() = 0;
};
virtual void ITest::Close()
{
cout << "XX";
}
Yes, you're right. Once again - VS non-standard behavior. Actually, I
got used to it, and frankly I'm a bit lazy to write the method
twice ;-) especially when writing pure virtual destructors. Weird,
that there ale already 2 cases, in which VS with disabled language
extensions doesn't conform. I thought it should make VS compiler
standard compliant, at least it could spit a warning that it is
nonstandard.
P.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]