Virtual constructor

P

plmanikandan

Hi,
I have doubts reg virtual constructor
what is virtual constructor?
Is c++ supports virtual constructor?
Can anybody explain me about virtual constructor?


Regards,
Mani
 
P

Phlip

plmanikandan said:
Can anybody explain me about virtual constructor?

Raw C++ cannot call a constructor virtually (because a constructor is not
really a function). There's probably some common design pattern.

How about you use Google to survey the topic and report back here?
 
A

al pacino

hii,
there is no such thing as virtual constructor in c++, it doesn't make
sense.
a constructor IS a function(can be defined explicitly , compiler calls
it when an object of a
class is CREATED.)

A virtual destructor is required to resolve the ambiguity,when a
derived class object
is deleted via a base class pointer(a 'derived class' IS A 'base
class') since compiler
has to decide what to delete derived object or base object.
thus declareing the destructor virtual resolves the ambugity.

concept of virtual constructor doesnt' make sense to me.
please correct me if nething is out of place here.
thanks
 
A

Alf P. Steinbach

* (e-mail address removed):
I have doubts reg virtual constructor

Note: "doubt" means you are unsure whether something is true or not, or
whether a person is truthful or reliable, or not.

Your usage above is meaningless and probably due to a bad dictionary.

what is virtual constructor?

See the FAQ. Use the FAQ's Google search (it's on the main page of the
FAQ) to find the phrase "virtual constructor" in the FAQ. Apart from
that meaning, which has only a peripheral connection to the words
"virtual" and "constructor" (it's more like a random phrase that for
some historical reason has acquired a given meaning), the FAQ also
discusses another more natural meaning; search the FAQ for the phrase
"Dynamic Binding During Initialization" to find that discussion.

Is c++ supports virtual constructor?
Yes.


Can anybody explain me about virtual constructor?

Yes, see the FAQ.

Hth.,

- Alf
 
S

Sunil Varma

Hi,
I have doubts reg virtual constructor
what is virtual constructor?
Is c++ supports virtual constructor?
Can anybody explain me about virtual constructor?


Regards,
Mani

When you make a function virtual that function is binded after the
object has been created.
But if you take a constructor it is called at the time of creation of
the object.
Constructor cannot be binded after the object is created.
 
A

Alf P. Steinbach

* al pacino:
> [top-posting]
> [quoting extranous material]
> [quoting signature]

Please don't top-post. Please don't quote irrelevant stuff. See the
FAQ and Shiva's monthly "Welcome"-posting in this group.
 
K

Kai-Uwe Bux

al said:
dude how can the constructors can be virtual ??

Easy. What is commonly called a "virtual constructor" just happens not to be
a constructor (like the Holy Roman Empire was neither roman nor holy and it
is debatable whether it was an empire).
here is the reference frm bjarne stroustrup's tech. faq:
http://public.research.att.com/~bs/bs_faq2.html#virtual-ctor

Did you read what he wrote there? I quote from *that* page:

Techniques for using an indirection when you ask to create an object
are often referred to as "Virtual constructors". For example, see
TC++PL3 15.6.2.
[snip]

And please, don't top-post.


Best

Kai-Uwe Bux
 
J

Jim Langston

Alf P. Steinbach said:
* (e-mail address removed):

Note: "doubt" means you are unsure whether something is true or not, or
whether a person is truthful or reliable, or not.

Your usage above is meaningless and probably due to a bad dictionary.

Actually, it's probably because he's Norweigian and English is not his
primary language.
See the FAQ. Use the FAQ's Google search (it's on the main page of the
FAQ) to find the phrase "virtual constructor" in the FAQ. Apart from that
meaning, which has only a peripheral connection to the words "virtual" and
"constructor" (it's more like a random phrase that for some historical
reason has acquired a given meaning), the FAQ also discusses another more
natural meaning; search the FAQ for the phrase "Dynamic Binding During
Initialization" to find that discussion.


Yes.

No. From the FAQ 20.8 in part:

An idiom that allows you to do something that C++ doesn't directly support.
Yes, see the FAQ.

Yes, see the FAQ 20.8 You can't have a virtual constructor, but you can
have something that mimics what a virtual constructor would do.

Again, FAQ 20.8 in a bigger part:
You can get the effect of a virtual constructor by a virtual clone() member
function (for copy constructing), or a virtual create() member function (for
the default constructor).

Here is the link to the FAQ 20.8:
http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.8
 
A

Alf P. Steinbach

* Jim Langston:
Actually, it's probably because he's Norweigian and English is not his
primary language.


No. From the FAQ 20.8 in part:

An idiom that allows you to do something that C++ doesn't directly support.


Yes, see the FAQ 20.8 You can't have a virtual constructor, but you can
have something that mimics what a virtual constructor would do.

Again, FAQ 20.8 in a bigger part:
You can get the effect of a virtual constructor by a virtual clone() member
function (for copy constructing), or a virtual create() member function (for
the default constructor).

Here is the link to the FAQ 20.8:
http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.8

I'm not sure what point (if any) you were trying to make? Confuse the
newbie, and remove his or her learning experience in searching the FAQ?
Look how smart I am, I managed to find it in the FAQ?

Anyway, your unqualified "no" above is incorrect. C++ does indeed
support all that's needed to implement what's known as a virtual
constructor, including virtual member functions and function result
covariance. Note that this does not contradict the FAQ's statement.

Hth.,

- Alf
 
J

Jim Langston

Alf P. Steinbach said:
* Jim Langston:

I'm not sure what point (if any) you were trying to make? Confuse the
newbie, and remove his or her learning experience in searching the FAQ?
Look how smart I am, I managed to find it in the FAQ?

Anyway, your unqualified "no" above is incorrect. C++ does indeed support
all that's needed to implement what's known as a virtual constructor,
including virtual member functions and function result covariance. Note
that this does not contradict the FAQ's statement.

I read the OP's question as: I do not know if C++ would allow a virtual
constructor, but if it did, what would be it's purpose? What would making a
constructor virtual accomplish?

Which is why the two part answer. C++ directly does not support a virtual
constructor. Which is an answer of No. But, you could do what a virtual
constructor would supposedly do by using a virtual clone() or create()
member function which is what people think a virtual constructor would do if
C++ in fact supported it.

As far as learning experience in searching in the FAQ, I'm sure that 95% of
the questions asked in this newsgroup could be answered by STFW, if not 100%
of them.
 
A

al pacino

hi alf ,

of course you can simulate 'virtual ' constructor, but there is no
'direct' support(from compiler) like it is for virtual destructor.
 
A

Alf P. Steinbach

* Jim Langston:
I read the OP's question as: I do not know if C++ would allow a virtual
constructor, but if it did, what would be it's purpose? What would making a
constructor virtual accomplish?

Don't inform me. Instead, bring your interpretation with your response,
if it has any bearing on the response. Anyway, I think it's a Good Idea
to assume a question is meaningful, like the established meaning for the
actual words used by the OP, rather than something meaningless.

Which is why the two part answer. C++ directly does not support a virtual
constructor. Which is an answer of No. But, you could do what a virtual
constructor would supposedly do by using a virtual clone() or create()
member function which is what people think a virtual constructor would do if
C++ in fact supported it.

Also here. There are several possible meanings for "virtual
constructor" apart from the established meaning, most notably the one of
doing virtual construction (where part of the construction is specified
by a derived class; directly supported in Java and C# by breaking those
languages' type safety, and possible to simulate in C++, see the FAQ).
But yours isn't one: a constructor can't do the job of a clone function.

As far as learning experience in searching in the FAQ, I'm sure that 95% of
the questions asked in this newsgroup could be answered by STFW, if not 100%
of them.

Does that mean "Searching The Fucking Web"? Language, Jim. Also,
that's highly misleading: nobody tried to send anyone on a wild-goose
chase, as you imply, but instead the OP was directed on a highly focused
search guaranteed to yield a useful result.

But you then stepped in with a totally unncessary "clear up things"
posting which in addition to depriving the OP the chance to learn to
something, was factually incorrect, and as you now clarify, relied on a
meaningless interpretation of the question rather than assuming some
meaning in there.
 
A

Alf P. Steinbach

* al pacino:
hi alf ,

of course you can simulate 'virtual ' constructor, but there is no
'direct' support(from compiler) like it is for virtual destructor.

It /is/ possible to quote using Google groups, but I think you have to
press some button or some such (please check that out).

Anyway, there's no need to "simulate" a "virtual" constructor.

The phrase "virtual constructor" has an established meaning, and can be
expressed directly in C++ without any simulation at all; see the FAQ.
 
R

Rolf Magnus

Alf said:
Don't inform me. Instead, bring your interpretation with your response,
if it has any bearing on the response. Anyway, I think it's a Good Idea
to assume a question is meaningful, like the established meaning for the
actual words used by the OP, rather than something meaningless.



Also here. There are several possible meanings for "virtual constructor"
apart from the established meaning,

Those other meanings are based on incorrect interpretations of the word
"virtual". The GoF book calls it "factory method", which is a much better
name for it.
most notably the one of doing virtual construction (where part of the
construction is specified by a derived class; directly supported in Java
and C# by breaking those languages' type safety, and possible to simulate
in C++, see the FAQ).
But yours isn't one: a constructor can't do the job of a clone function.

A constructor can't do the job of a "virtual constructor" either. What the
FAQ mentions is not a constructor or something that does the job of a
constructor. The clone() function would even be closer to something like a
virtual constructor than a factory, because it can at least take the
dynamic type of an existing object, as virtual functions do. A factory
needs some other means to decide with class to instantiate.
Does that mean "Searching The Fucking Web"? Language, Jim.

You were the one who used the word.
Also, that's highly misleading: nobody tried to send anyone on a
wild-goose chase, as you imply, but instead the OP was directed on a
highly focused search guaranteed to yield a useful result.

But you then stepped in with a totally unncessary "clear up things"
posting

Clearing things up is not unnecessary, especially not in a technical forum.
which in addition to depriving the OP the chance to learn to something,
was factually incorrect,

It was correct.
and as you now clarify, relied on a meaningless interpretation of the
question rather than assuming some meaning in there.

The C++ standard's definition of the word "virtual" is not at all
meaningless in a C++ newsgroup.
 
A

Alf P. Steinbach

* Rolf Magnus:
Those other meanings are based on incorrect interpretations of the word
"virtual".

Nope, sorry, that's incorrect.

The GoF book calls it "factory method", which is a much better name for it.

The GoF book calls /what/ the "factory method"?

Anyway, qualified names are good, so now we can speak of "GOF factory
method", as soon as we've checked that it's at all relevant.

A constructor can't do the job of a "virtual constructor" either.

A "virtual constructor" /is/ a clone function, in the established
meaning; see the FAQ.

What the
FAQ mentions is not a constructor or something that does the job of a
constructor. The clone() function would even be closer to something like a
virtual constructor than a factory, because it can at least take the
dynamic type of an existing object, as virtual functions do. A factory
needs some other means to decide with class to instantiate.

The FAQ mentions several things.

What on Earth are you, uh, /talking/ about?

You were the one who used the word.

That's a lie.

Clearing things up is not unnecessary, especially not in a technical forum.

Confusing things is.


It was correct.

Nope, sorry, you're incorrect.

The C++ standard's definition of the word "virtual" is not at all
meaningless in a C++ newsgroup.

What are you babbling about?
 
R

Rolf Magnus

Alf said:
* Rolf Magnus:

Nope, sorry, that's incorrect.



The GoF book calls /what/ the "factory method"?

Under the description of "factory method", it says "also known as virtual
constructor". And while we're at it, from TC++PL:
<refering to a factory class>
"Such a class is sometimes called a factory, and its functions are (somewhat
misleadingly) sometimes called virtual constructors.

I thought that was what you meant by "virtual constructor", which seems to
be not the case.
Anyway, qualified names are good, so now we can speak of "GOF factory
method", as soon as we've checked that it's at all relevant.

Well, we could also call it the Steinbach virtual constructor then.
A "virtual constructor" /is/ a clone function, in the established
meaning; see the FAQ.

What makes you think that the FAQ represents "the established meanging"?
Anyway, I have to admit that I didn't look at the FAQ's explanations of
"virtual constructor", because I thought it must be the same as what the
GoF and Stroustrup say. Considering that it actually isn't, the meaning
described in the FAQ doesn't seem so well-established after all, does it?
The FAQ mentions several things.

What on Earth are you, uh, /talking/ about?

Sorry, I was talking about another "established meaning" of the term.
That's a lie.

At least you show some humor :)
Confusing things is.

Then stop doing that.
Nope, sorry, you're incorrect.

From the C++ standard: "A constructor shall not be virtual". Whatever some
other definition (be it established or not) says is irelevant.
What are you babbling about?

Jim was interpreting the term according to the C++ standard ("you can't have
a virtual constructor"), and you called that interpretation meaningless.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top