Described the "named constructor idiom"?, C/C++ Programming

Assignment Help:

Described the "Named Constructor Idiom"?


Related Discussions:- Described the "named constructor idiom"?

How do i allocate multidimensional arrays by new? , Can I free() pointers a...

Can I free() pointers allocated  along with new? Can I delete pointers allocated along with malloc()? A: No. It is completely legal, moral, and wholesome to employ malloc() a

Illustration of plot function, Illustration of Plot function: To be mo...

Illustration of Plot function: To be more common, the script could prompt the user for the time and temperature, instead of just assigning the values. Then, the axis function

Msp, A Padovan string P(n) for a natural number n is defined as: P(0) = ‘X...

A Padovan string P(n) for a natural number n is defined as: P(0) = ‘X’ P(1) = ‘Y’ P(2) = ‘Z’ P(n) = P(n-2) + P(n-3), n>2 where + denotes string concatenation. For a string of t

Dll, i need amibroker afl to dll plugin

i need amibroker afl to dll plugin

When do employ "const" reference arguments in function?, A: 1.      By u...

A: 1.      By using const protects you against programming errors which inadvertently alter data. 2.      By using const allows function to procedure const and non-const actu

Decode the code, smugglers transfer the messages from one to another by usi...

smugglers transfer the messages from one to another by using the mobile

COMPUTER, THEORY OF COMPUTER PROGRAMMING

THEORY OF COMPUTER PROGRAMMING

How to implement tr- 106 protocol, Environment - C, Linux Duration - De...

Environment - C, Linux Duration - December 2006 to Feb 2007 Description - TR-106 specifies a generic data model template applicable for all TR-069 enabled devices. Adde

C program to find vowels , C Program to FIND VOWELS   void main() ...

C Program to FIND VOWELS   void main() {           char str[50];           int ac=0, ec=0, ic=0, oc=0, uc=0;           int i,stln,vc,word=1;           clrscr

What is virtual class and friend class, Friend classes are used when two or...

Friend classes are used when two or more classes are designed to work together and require access to each other's execution in ways that the rest of the world shouldn't be permitte

3/15/2013 6:19:37 AM

 A: A method which provides more intuitive and/or safer construction operations for users of your class.

The difficulty is that constructors have the same name always as the class. Thus the only way to differentiate among the various constructors of a class is via the parameter list. But if there are many constructors, the differences among them become somewhat and error prone and subtle.

Along the Named Constructor Idiom, you say publicly all the class''s constructors in protected or private sections, and you provide public static methods which return an object. These static techniques are "Named Constructors." usually, there is one such static method for each distinct way to construct an object.

For instance, suppose we are creating a Point class which represents a position on the X-Y plane. Turns out there are two common ways to mention a 2-space coordinate: polar coordinates (Radius+Angle), rectangular coordinates (X+Y). Unluckily the parameters for these two coordinate systems are the alike: two floats. It would create an ambiguity error in the overloaded constructors:

class Point {

public:

Point(float x, float y); // Rectangular coordinates                              

Point(float r, float a); // Polar coordinates (radius and angle)

// ERROR: Overload is Ambiguous: Point::Point(float,float)

};

int main()

{

Point p = Point(5.7, 1.2); // Ambiguous: Which coordinate system?

...

}

One way to solve out this ambiguity is to employ the Named Constructor Idiom:

#include // To get sin() & cos()

class Point {

public:

static Point rectangular(float x, float y); // Rectangular coord''s static Point polar(float radius, float angle); // Polar coordinates

// These static methods are so-called "named constructors"

... private:

Point(float x, float y); // Rectangular coordinates float x_, y_;

};

inline Point::Point(float x, float y)

: x_(x), y_(y) { }

inline Point Point::rectangular(float x, float y)

{ return Point(x, y); }

inline Point Point::polar(float radius, float angle)

{ return Point(radius*cos(angle), radius*sin(angle)); }

The users of Point now have a clear & unambiguous syntax for developing Points in either coordinate system:

int main()

{

Point p1 = Point::rectangular(5.7, 1.2); // clearly rectangular

Point p2 = Point::polar(5.7, 1.2); // Obviously polar

...

}

Ensure your constructors are in protected section if you expect Point to contain derived classes.

The Named Constructor Idiom can also be utilized to make sure your objects are always created using new.

Note down that the Named Constructor Idiom, at least as implemented above, is only as fast as calling directly constructor modern compilers will not make any additional copies of your object.

 

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd