Difference between c ,c++ and java
C is a structure procedural programming. So You can write a number of
procedures to do certain tasks and build up a program by calling those
procedures as needed.While Java is OOP (object oriented
programming). With OOP, Classes which represent an entity (for example, a
window, a button, a string of text, a file). From one class many objects may be
created, with every object of a certain class having the fields (places to
store data) and methods (named blocks of code associated with the object) as defined by the class.
It is possible to write in an object oriented
style in C and in a procedural style in Java, but in each case the language will somewhat get in
your way. C++ is designed to support both paradigms.
Preprocessor
All C and C++ compilers implement a stage of
compilation known as the preprocessor. The preprocessor basically performs an
intelligent search and replace on identifiers that have been declared using the
#define or #typedef directives. #define can also be used to declare macros. For
example, a macro MAX(x,y) could be defined to return whichever of x or y holds
the greatest value. This is not like calling a function as the substitution is
done before the code is compiled. Most of the preprocessor definitions in C and
C++ are stored in header files, which complement the actual source code files.
java does not have a preprocessor. Constant data
members are used in place of the #define directive and class definitions are
used in lieu of the #typedef directive, however there is no substitute for
macros, which can be useful. Theapproach to defining constants and naming types of data
structures is probably conceptually simpler for the programmer. Additionally,programs don't use header files; the compiler builds class
definitions directly from the source code files, which contain both class
definitions and method implementations.
Memory Management
In C and C++, any memory that is allocated on the
heap (e.g. using malloc or new) must be explicitly freed by the programmer
(e.g. using free or delete). Forgetting to free memory leads to memory leaks,
and in long-running programs can lead to the memory usage of the program
growing very large.
Java provides garbage collection, meaning that memory is
freed automatically when it is no longer reachable by any references. This
prevents memory leaks, but can lead to pauses in execution while the garbage
collector runs. Also, there is no promise of timely destruction in JAVA.
Pointers
Most developers agree that the misuse of pointers
causes the majority of bugs in C and C++ programs. Put simply, when you have
pointers, you have the ability to attempt to access memory that isn't yours and
modify memory relating to a different data structure than the one you intended
by accident. C/C++ programmers regularly use complex pointer arithmetic to
create and maintain dynamic data structures. It's powerful, but can lead to a
lot of time spent hunting down complex and often subtle bugs that arise as a
result of having unguarded memory access.
The JAVA
language does not support pointers. Instead, it
provides similar functionality by making heavy use of references. A reference
can be thought of as a "safe pointer" - the programmer can not
directly manipulate the memory address. JAVA passes all arrays and objects by reference. This
approach prevents common errors due to pointer mismanagement. It also makes
programming easier in a lot of ways simply because the correct usage of
pointers is easily misunderstood by inexperienced programmers.
C++ does provide references too. It considers them
as aliases to another variable or object. They are safer than pointers where
they can be used.
Bounds Checking
An array in C or C++ is not bounds checked, so
attempts to access the sixth element of a 5-element array will appear to work -
that is, no runtime error will occur. This means the programmer needs to code
very carefully, especially considering the potential for buffer overflow
attacks.
JAVA will bounds check arrays to prevent this from
happening, of course with a little extra runtime cost.
Portability And Performance
C and C++ both compile to native machine code.
This means that, with a good compiler, programs written in these languages will
perform very well. However, it also restricts them to running on the platform
they were compiled to run on.
JAVA generally compiles to JAVA bytecode, which then runs on top of a virtual machine
(the JVM). The JVM has to turn instructions in the bytecode into instructions
that are understood by the machine that the bytecode is running on. This gives
a runtime performance penalty (although this is getting less significant as the
JVM improves and computers get faster). However, now only the virtual machine
(and standard library) have to be ported to different platforms, then the
bytecode for many programs
can be executed on that platform. So bytecode is portable accross different
operating systems and processors.
Complex Data Types
There are two types of complex data types in C:
structures and unions. C++ adds classes to this list. JAVA only implements one of these data types: classes.
A structure can be emulated by a class - simply
write a class without any methods and make all the fields public. However,
emulating a union is not always possible in JAVA, and the memory saving advantages
unions hold in C may not carry accross. JAVA presents
a simpler model but at the cost of not being able to save a little memory. For
many applications this will be a non-issue.
Strings
C has no built-in string data type. The standard
technique adopted among C programmers is that of using null-terminated arrays
of characters to represent strings. This practice if often seen in C++ programs
too.
Neither C++ or JAVA have string as a primitive type, but they do both have
string objects that are a standard part of the language. In Java this type is called String, and in C++ it is called CString.
Multiple Inheritance
Multiple inheritance is a feature of some object
oriented languages that allows you to derive a class from multiple parent
classes. Although multiple inheritance is indeed powerful (and sometimes the
logical way to define a class hierachy), it is complicated to use correctly and
can create situations where it's uncertain which method will be executed. For
example, if each of the parent classes provide a method X and the derived class
does not, it is unclear which X should be invoked. It is also complicated to
implement from the compiler perspective.
C++ supports multiple inheritance.Java provides no direct support for multiple
inheritance, but you can implement functionality similar to multiple
inheritance by using interfaces in Java
interfaces provide method descriptions but
contain no implementations. Therefore implementations can only be inherited
from one class, so there is no ambiguity over which method to invoke.
Operator Overloading
Operator overloading enables a class to define
special behaviour for built-in operators when they are applied to objects of
that class. For example, if the * (multiply) operator was to be used on two
objects of type Matrix, then matrix multiplication could be implemented. This
allows object types to feel much more tightly integrated into the language and
can deliver much clearer code. However, sometimes it is not clear what a
particular operator would sensibly do for a particular type, whereas a
well-named method call would be clear.
Operator overloading is considered a prominent
feature in C++. It is not supported in Java, probably in an effort to keep the language as simple
as possible and help ensure it is obvious what code does, even though it may
take longer to type and read.
Automatic Coercions
Automatic coercion refers to the implicit casting
of data types that sometimes occurs in C and C++. For example, in C++ you can
assign a float value to an int variable, which can result in a loss of
information, although a compiler warning will be given about this. Java does not support C++ style automatic coercions. In java, if coercion will result in a loss of data, you
must always explicitly cast the data element to the new type.
Goto Statement
The goto statement is rarely used these days in C
and C++, but it is a standard part of the language. The goto statement has
historically been cited as the cause for messy, difficult to understand, and
sometimes near impossible to predict code known as "spaghetti code."
The primary bad usage of the goto statement has merely been as a convenience to
substitute not thinking through an alternative, more structured branching
technique. Very occasionally, it can lead to clearer code.
To avoid the potential for "spaghetti
code", java does not provide a goto statement. The Java language specifies goto as a keyword, but its usage is
not supported. This is consistent with Java's desire to make programmers write clear, non-messy
code.
Valid Arguments
C and C++ let you declare functions, such as
printf, that take a variable number of arguments. Although this is a convenient
feature, it is impossible for the compiler to thoroughly type check the
arguments, which means problems can arise at runtime without you knowing. JAVA doesn't support variable arguments at all, though if
it did it would likely be able to handle subsequent runtime problems better
than C or C++.
Command-line Arguments
The command-line arguments passed from the system
into a java program differ in a couple of ways from the command-line
arguments passed into a C++ program. First, the number of parameters passed
differs the two
languages.
In C and C++, the system passes two arguments to a
program: argc and argv. argc specifies the number of arguments stored in argv.
argv is a pointer to an array of characters containing the actual arguments. In JAVA, the system passes a single value to a program: args.
‘args’ is an array of Strings that contains the command-line arguments.
For more information's visit our website :http://www.ncanoida.com/
NCA is best java training institute. NCA Institute Of Technologies is an Accredited Center of DOEACC Affiliated by NIELIT located at C-56/21 Sec-62 Noida providing o-Level, A-level And CCC Courses,also offer Short term Software Courses like as JAVA,.Net,PHP,C,C++,Auto CAD etc.
NCA is best java training institute. NCA Institute Of Technologies is an Accredited Center of DOEACC Affiliated by NIELIT located at C-56/21 Sec-62 Noida providing o-Level, A-level And CCC Courses,also offer Short term Software Courses like as JAVA,.Net,PHP,C,C++,Auto CAD etc.
Comments
Post a Comment