Science Fair Projects Ideas - Cast (computer science)

All Science Fair Projects

      

Science Fair Project Encyclopedia for Schools!

  Search    Browse    Forum  Coach    Links    Editor    Help    Tell-a-Friend    Encyclopedia    Dictionary     

Science Fair Project Encyclopedia

For information on any area of science that interests you,
enter a keyword (eg. scientific method, molecule, cloud, carbohydrate etc.).
Or else, you can start by choosing any of the categories below.

Type conversion

(Redirected from Cast (computer science))


wikibooks:Programming:_C_-/-_-/-#Casting_.28Type.29 (the parts which are not a general description but a tutorial on C++).

Contents

General

In computer science, type conversion or typecasting refers to changing an entity of one datatype into another. There are several types conversion.

checked 
before the conversion is performed a runtime check done to see if the destination type can actually hold the source value. If not an error condition is raised.
unchecked 
no check is perfomed and when the destination type can not hold the source value the result is undefined.
bit pattern 
The data is not interpreted at all and just the raw bit pattern is copied.

Each programming language has its own rules on how types can be converted. In general, both objects and fundamental data types can be converted.

in Ada

Ada supports all three convertion techniques and there is a full article on how to us them in wikibooks:Programming:Ada:Subtypes#Converting_Data. It might be worth reading even if you plan to use another programming language.

in C/C++

A cast, or explicit type conversion, is special programming instuction which specifies what data type to treat a variable as (or an intermediate calculation result) in a given expression.

Casting will ignore "extra" information (but never adds information to the type being casted). The C/C++ cast is either "unchecked" or "bit pattern".

As an example with fundamental data types, a fixed-point float could be cast as an integer, where the data beyond the decimal (or binary) point is ignored. Alternatively, an integer could be cast as a float if, for example, a function call required a floating point type (but, as noted, no information is really added - 1 would become 1.0000000).

Object casting works in a similar way. A subclass can be cast as a parent type, where the "extra" information that makes it a subclass is ignored, and only the parts inherited from the parent are treated. For example, a triangle class derived from a shape class could be cast as a shape.

Two common casting styles

There are two common casting styles, each outlined below.

C-style casting

This style of casting is used in C and Java. It follows the form:

(type)expression

C++-style casting

Several cast syntaxes are used in C++ (although C-style casting is supported as well). The function-call style follows the form:

type(expression)

This style of casting was adopted to force clarity when using casting. For example, the result of, and intention of, the C style cast

(type)firstVariable + secondVariable

may not be clear, while the same cast using C++-style casting allows more clarity:

type(firstVariable + secondVariable)

or

type(firstVariable) + secondVariable

Later in the evolution of C++, the following more explicit casts were added to the language to clarify the programmer's intent even further:

static_cast<type>(value_to_cast)
dynamic_cast<type>(value_to_cast)
const_cast<type>(value_to_cast)
reinterpret_cast<type>(value_to_cast)

Static casts converts type-compatible values. For instance the following:

double myDouble = 3.0;
int myInt = static_cast<int>(myDouble);

converts the double-precision floating point value myDouble (3.0) to the corresponding integral value (3). Static casts can be dangerous:

YourClass * pYour = GimmeAnObject();
void * pv = pYour;                                // no cast needed.
MyClass * p = static_cast<MyClass *>(pYour);      // MyClass had better be related to YourClass...
p->SomeMethod();                                  // ...or this might blow up in a nasty way.

Static casts on pointers or references don't verify that the pointed-to object is type-compatible to the new type.

A dynamic cast is safer than a static cast in this scenario: it is compiled by the compiler into a call to the C++ runtime library where a check is made to ensure legal casts. This is analogous to the casts in Java.

YourClass * pYour = GimmeAnObject();
void * pv = pYour;                                // no cast needed.
MyClass * p = dynamic_cast<MyClass *>(pYour);     // This won't blow up in the same way
if (p != 0)
    p->SomeMethod();                              // C++ guarantees p points to a MyClass

Dynamic casts on pointers return a null pointer if cast value is type incompatible. Dynamic casts on a reference throw a type exception.

A const cast casts away the constness of an object, returning a non-const reference to the same object. This allows modifications to objects that normally would be treated read-only by the compiler:

const MyClass * cantTouchThis = CreateConstObject();
cantTouchThis->constant_value = 41;              // compile-time error.
const_cast<MyClass *>(cantChangeThis)->constant_value = 42; // compiles, but who knows what happens at runtime?

The reinterpret cast is the most notorious one in C++. It allows the reinterpretation of the raw bit pattern of the value to be cast, disregarding the type system completely. For example, it allows the casting of an arbitrary integer to a pointer to an object:

MyClass * pclass = reinterpret_cast<MyClass>(0xDEADBEEF); // I know what I'm doing
pclass->some_field = 3.14159;                             // very unsafe indeed

Opinions were divided when these verbose casts were introduced into the language. Detractors argued the new syntax was 'ugly', while supporters claimed that since casting is such an 'ugly' activity to begin with, it should be highlit with an 'ugly' syntax to alert programmers. Another perceived advantage is the ease with which verbose casts can be located in source code using programming tools like grep.

Last updated: 05-07-2005 10:55:21
10-26-2009 08:16:03
The contents of this article is licensed from www.wikipedia.org under the GNU Free Documentation License. Click here to see the transparent copy and copyright details
Science kits, science lessons, science toys, maths toys, hobby kits, science games and books - these are some of many products that can help give your kid an edge in their science fair projects, and develop a tremendous interest in the study of science. When shopping for a science kit or other supplies, make sure that you carefully review the features and quality of the products. Compare prices by going to several online stores. Read product reviews online or refer to magazines.

Start by looking for your science kit review or science toy review. Compare prices but remember, Price $ is not everything. Quality does matter.
Science Fair Coach
What do science fair judges look out for?
ScienceHound
Science Fair Projects for students of all ages
All Science Fair Projects.com Site
All Science Fair Projects Homepage
Search | Browse | Links | From-our-Editor | Books | Help | Contact | Privacy | Disclaimer | Copyright Notice