Re: About instantiation of an abstract class
On Sat, 18 Apr 2009 17:30:00 +0800, "Jack" <jl@knight.com> wrote:
Dear all,
If I have something like the following,
Mtl* pkMtl = pNode->GetMtl();
where GetMtl() is pure abstract
like
class INode {
virtual Mtl* GetMrl() = 0;
};
I'm not familiar with the term "pure abstract". The class INode has a /pure
virtual function/, which makes INode an /abstract class/.
When I called GetMtl() in the statement above,
pkMtl became NULL.
I have been thinking about writing
Mtl* pkMtl = new Mtl();
pkMtl = pNode->GetMtl();
but the compile doesn't allow me to do this..
What would be the point if it did allow you to do it? Deliberately create a
memory leak? I mean, you would be creating an object and then immediately
overwriting the only pointer to it you have.
Sorry, as I have forgotten about this academically...
Could you please refresh my mind on how to go about instantiating a Mtl
Object?
You can't instantiate abstract classes. That's why they call them
"abstract". This means you can't create an INode, which is abstract, and is
presumably the reason your attempt to create an Mtl failed. If
INode::GetMtl() returns NULL, you need to understand the semantics of using
that function. It's got nothing to do with abstract classes.
--
Doug Harrison
Visual C++ MVP