C++ Notes
C++ Notes
C++ Notes
Java has automatic garbage collection whereas C++ has destructors , which are
automatically invoked when the object is destroyed.
Java does not support pointers, templates, unions, operator overloading, structures
etc.
C++ has no in built support for threads,whereas in Java there is a Thread class
that you inherit to create a new thread
No goto in JAVA
C++ support multiple inheritance, method overloading and operator overloading but
JAVA only has method overloading.
Java is interpreted and hence platform independent whereas C++ isn�t. At
compilation time, Java Source code converts into JVM byte code. The interpreter
execute this bytecode at run time and gives output. C++ run and compile using
compiler which converts source code into machine level language.
Q.What are C++ access specifiers ?
Access specifiers are used to define how the members (functions and variables) can
be accessed outside the class.
Private: Members declared as private are accessible only within the same class and
they cannot be accessed outside the class they are declared. Child classes are also
not allowed to access private members of parent.
Public: Members declared as public are accessible from anywhere.
Protected: Only the class and its child classes can access protected
members.table5.6
Do you know What happens when more restrictive access is given to a derived class
method in C++?
Object: Objects are basic run-time entities in an object oriented system, objects
are instances of a class these are defined user defined data types.
Encapsulation and Data abstraction: Wrapping up(combining) of data and functions
into a single unit is known as encapsulation. The data is not accessible to the
outside world and only those functions which are wrapping in the class can access
it. This insulation of the data from direct access by the program is called data
hiding or information hiding.
Data abstraction
� providing only needed information to the outside world and hiding implementation
details. For example, consider a class Complex with public functions as getReal()
and getImag(). We may implement the class as an array of size 2 or as two
variables. The advantage of abstractions is, we can change implementation at any
point, users of Complex class wont�t be affected as our method interface remains
same. Had our implementation be public, we would not have been able to change it.
Inheritance:
Inheritance is the process by which objects of one class acquire the properties of
objects of another class. It supports the concept of hierarchical classification.
Inheritance provides reusability. This means that we can add additional features to
an existing class without modifying it.
Polymorphism:
Polymorphism means ability to take more than one form. An operation may exhibit
different behaviors in different instances. The behavior depends upon the types of
data used in the operation.
Dynamic Binding:
In dynamic binding, the code to be executed in response to function call is
decided at runtime. C++ has virtual functions to support this.
Message Passing:
Objects communicate with one another by sending and receiving information to each
other. A message for an object is a request for execution of a procedure and
therefore will invoke a function in the receiving object that generates the desired
results. Message passing involves specifying the name of the object, the name of
the function and the information to be sent.
Q. Inline Functions
C++ provides an inline functions to reduce the function call overhead. Inline
function is a function that is expanded in line when it is called. When the inline
function is called whole code of the inline function gets inserted or substituted
at the point of inline function call. This substitution is performed by the C++
compiler at compile time. Inline function may increase efficiency if it is small.
// function code
Remember, inlining is only a request to the compiler, not a command. Compiler can
ignore the request for inlining.
Friend Function Like friend class, a friend function can be given special grant to
access private and protected members. A friend function can be:
b) A global function
1) Friends should be used only for limited purpose. too many functions or external
classes are declared as friends of a class with protected or private data, it
lessens the value of encapsulation of separate classes in object-oriented
programming.
Note: Overloading of functions with different return types are not allowed.
Other example classes where arithmetic operators may be overloaded are Complex
Number, Fractional Number, Big Integer, etc.
Q. Copy Constructor
A copy constructor is a member function which initializes an object using another
object of the same class. A copy constructor has the following general function
prototype: ClassName (const ClassName &old_obj);
// Copy constructor
Q.What Is Inheritance?
Different kinds of objects often have a certain amount in common with each other.
Yet each also defines additional features that make them different. Object-oriented
programming allows classes to inherit commonly used state and behavior from other
classes
Both references and pointers can be used to change local variables of one function
inside another function. Both of them can also be used to save copying of big
objects when passed as arguments to functions or returned from functions, to get
efficiency gain.
Despite above similarities, there are following differences between references and
pointers.
Due to the above limitations, references in C++ cannot be used for implementing
data structures like Linked List, Tree, etc. In Java, references don�t have above
restrictions, and can be used to implement all data structures. References being
more powerful in Java, is the main reason Java doesn�t need pointers.
1) Safer: Since references must be initialized, wild references like wild pointers
are unlikely to exist. It is still possible to have references that don�t refer to
a valid location (See questions 5 and 6 in the below exercise )
2) Easier to use: References don�t need dereferencing operator to access the value.
They can be used like normal variables. �&� operator is needed only at the time of
declaration. Also, members of an object reference can be accessed with dot operator
(�.�), unlike pointers where arrow operator (->) is needed to access
members.references, C doesn�t.
6) In C, scanf() and printf() are mainly used input/output. C++ mainly uses streams
to perform input and output operations. cin is standard input stream and cout is
standard output stream.
Following things are necessary to write a C++ program with runtime polymorphism
(use of virtual functions)
1) A base class and a derived class.
2) A function with same name in base class and derived class.
3) A pointer or reference of base class type pointing or referring to an object of
derived class.
For example, in the following program bp is a pointer of type Base, but a call to
bp->show() calls show() function of Derived class, because bp points to an object
of Derived class.
filter_none
edit
play_arrow
brightness_4
#include<iostream>
using namespace std;
class Base {
public:
virtual void show() { cout<<" In Base \n"; }
};
int main(void) {
Base *bp = new Derived;
bp->show(); // RUN-TIME POLYMORPHISM
return 0;
}
Output:
In Derived
The �this� pointer is passed as a hidden argument to all nonstatic member function
calls and is available as a local variable within the body of all nonstatic
functions. �this� pointer is a constant pointer that holds the memory address of
the current object. �this� pointer is not available in static member functions as
static member functions can be called without any object (with class name).
filter_none
edit
play_arrow
brightness_4
class A
{
public:
void fun()
{
delete this;
}
};
int main()
{
/* Following is Valid */
A *ptr = new A;
ptr->fun();
ptr = NULL; // make ptr NULL to make sure that things are not accessed using ptr.
getchar();
return 0;
}
2) Once delete this is done, any member of the deleted object should not be
accessed after deletion.
filter_none
edit
play_arrow
brightness_4
#include<iostream>
using namespace std;
class A
{
int x;
public:
A() { x = 0;}
void fun() {
delete this;