GeekInterview.com
   Home |  Tech FAQ  |   Interview Questions |  Placement Papers |  Tech Articles |  Learn |  Freelance Projects |  Online Testing |  Geeks Talk |  Job Postings |  Knowledge Base | Site Search |  Add/Ask Question

  GeekInterview.com  >  Interview Questions  >  Programming  >  C++

 Print  |  
Question:  
What is virtual constructors/destructors?


Answer: Virtual destructors: If an object (with a non-virtual destructor) is destroyed explicitly by applying the delete operator to a base-class pointer to the object, the base-class destructor function (matching the pointer type) is called on the object. 
 There is a simple solution to this problem – declare a virtual base-class destructor. This makes all derived-class destructors virtual even though they don’t have the same name as the base-class destructor. Now, if the object in the hierarchy is destroyed explicitly by applying the delete operator to a base-class pointer to a derived-class object, the destructor for the appropriate class is called.
 
Virtual constructor: Constructors cannot be virtual. Declaring a constructor as a virtual function is a syntax error.
 
Does c++ support multilevel and multiple inheritance?
Yes. 
 
What are the advantages of inheritance?
• It permits code reusability.
• Reusability saves time in program development.
• It encourages the reuse of proven and debugged high-quality software, thus reducing problem after a system becomes functional.
 
 
What is the difference between declaration and definition?
 The declaration tells the compiler that at some later point we plan to present the definition of this declaration. 
E.g.:  void stars () //function declaration
 
The definition contains the actual implementation.
E.g.:  void stars () // declarator
 {
  for(int j=10; j>=0; j--) //function body
   cout<<”*”;
  cout<<endl;
 } 
 


December 12, 2007 18:20:54 #4
 berezleon   Member Since: December 2007    Total Comments: 6 

RE: What is virtual constructors/destructors?
 
Virtual constructor is not build-in C++ feature but it doesn't mean its not used by devs in code and in conversations. There are many other things that doesn't exist in particular language yet, people find ways around to solve it (SingleTon, Virtual Constructor, Double-Dispatching etc). What means by virtual ctr is a static member function that returns pointer to a heap object (whether new or existing) or it might return reference to static object declared in this function. It would be really wrong to say that "virtual ctr" doesn't exist --it means you are not aware of such thing and absolutely nothing else. The nice thing about virt ctr each derived "virt ctr" can return pointer to a type of the class it's declare in --thus we can say virtual functions have different signatures depending where they implemented:

class base                     {public: virtual base * virtCtr(){return new base;}
class deriv:public base  {public: virtual deriv * virtCtr(){retun new deriv;}
     

 

Back To Question