Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: Intermediate
Mar 7, 2005

Dynamically Choose the Virtuality of a Member Function

Ever need to use the same member function from a inheritance hierarchy as both virtual and non-virtual? This code shows you how to do it dynamically, using a template.

Suppose you have the following inheritance hierarchy:


class checkBase
{
	public:
	 void get()
	 {cout << "checkBase" << endl;}
};

class checkChild: public checkBase
{
	public:
	void get()
	{ cout << "checkChild" << endl;}
};
Now, suppose you need to use get() as virtual and non-virtual. Here's what to do:

class ToSupportVirtual
{
	public:
	virtual void get () = 0;
};

class ToSupportNonVirtual
{
	public:
	void get()
	{}
};
Now convert both existing classes into templates:

template<class type>
class checkBase : public type
{
	//.....same as above
}

template<class type>
class checkChild: public checkBase<type>
{
	//.....same as above
};

//To use get() as virtual:
checkBase<ToSupportVirtual>* chk = new checkChild<ToSupportVirtual>;
chk->get();// invokes child function

//to use get() as non-virtual:
checkBase<ToSupportNonVirtual>* chk_1 = new 
checkChild<ToSupportNonVirtual>;

chk_1->get();// invokes base function
Saurabh Ramya
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap