C++ Interview Questions and Answers
1. What is an
object in C++?
An object is a package that contains
related data and instructions. The data relates to what the object
represents, while the instructions define how this object relates to other
objects and itself.
2. What is a
message?
A message is a signal from one object
to another requesting that a computation take place. It is roughly equivalent
to a function call in other languages.
3. What is a class?
A class defines the characteristics
of a certain type of object. It defines what its members will remember, the
messages to which they will respond, and what form the response will take.
4. What is an
instance?
An individual object that is a member
of some class.
5. What is a
super-class?
Given a class, a super-class is the
basis of the class under consideration. The given class is defined as a
subset (in some respects) of the super-class. Objects of the given class
potentially posses all the characteristics belonging to objects of the
super-class.
6. What is
inheritance?
Inheritance is property such that a
parent (or super) class passes the characteristics of itself to children (or
sub) classes that are derived from it. The sub-class has the option of
modifying these characteristics in order to make a different but
fundamentally related class from the super-class.
7. To what does
message protocol refer?
An object’s message protocol is the
exact form of the set of messages to which the object can respond.
8. What is
polymorphism?
Polymorphism refers to the ability of
an object to respond in a logically identical fashion to messages of the same
protocol, containing differing types of objects. Consider 1 + 5 and 1 + 5.1.
In the former, the message “+ 5″ is sent to an object of class integer (1).
In the later, the message “+ 5.1″ is sent to the same integer object. The
form of the message (its protocol) is identical in both cases. What differs
is the type of object on the right-hand side of these messages. The former is
an integer objects (5) while the later is a floating point object (5.1). The
receiver (1) appears (to other objects) to respond in the same way to both
messages. Internally, however, it knows that it must treat the two types of
objects differently in order to obtain the same overall response.
9. What are
instance variables?
These represent an object’s private
memory. They are defined in an object’s class.
10. What are class
variables?
These represent a class’s memory
which it shares with each of its instances.
11. What is a
method?
A method is a class’s procedural
response to a given message protocol. It is like the definition of a
procedure in other languages.
12. In C++ what is
a constructor? A destructor?
A constructors and destructors are
methods defined in a class that are invoked automatically when an object is
created or destroyed. They are used to initialize a newly allocated object
and to clean up behind an object about to be removed.
13. Compare and
contrast C and C++?
Comparison: C++ is an extension to
the C language. When C++ is used as a procedural language, there are only
minor syntactical differences between them.
Contrast: When used as a procedural
language, C++ is a better C because:
It vigorously enforces data typing
conventions.
It allows variables to be defined where they are used. It allows the definition of real (semantically significant) constants. It allows for automatic pointer dereferencing. It supports call-by-reference in addition to call-by-value in functions. It supports tentative variable declarations (when the type and location of a variable cannot be known before hand. As an object oriented language, C++ introduces much of the OOP paradigm while allowing a mixture of OOP and procedural styles.
14. What is
operator overloading?
It is the process of, and ability to
redefine the way an object responds to a C++ operator symbol. This would be
done in the object’s class definition.
15. What is cin and
cout?
They are objects corresponding to a
program’s default input and output files.
16. What are the
differences between a C++ struct and C++ class?
The default member and base class
access specifiers are different.
This is one of the commonly
misunderstood aspects of C++. Believe it or not, many programmers think that
a C++ struct is just like a C struct, while a C++ class has inheritance,
access specifiers, member functions, overloaded operators, and so on. Some of
them have even written books about C++. Actually, the C++ struct has all the
features of the class. The only differences are that a struct defaults to
public member access specifier and public base class inheritance, and a class
defaults to the private access specifier and private base class inheritance.
Getting this question wrong does not necessarily disqualify you because you
will be in plenty of good company. Getting it right is a definite plus.
17. What is a default constructor?
A constructor that has no arguments
or one where all the arguments have default argument values.
If you don’t code a default
constructor, the compiler provides one if there are no other constructors. If
you are going to instantiate an array of objects of the class, the class must
have a default constructor.
18. What is a
conversion constructor?
A constructor that accepts one
argument of a different type.
The compiler uses this idiom as one
way to infer conversion rules for a class. A constructor with more than one
argument and with default argument values can be interpreted by the compiler
as a conversion constructor when the compiler is looking for an object of the
type and sees an object of the type of the constructor’s first argument.
19. What is the
difference between a copy constructor and an overloaded assignment operator?
A copy constructor constructs a new
object by using the content of the argument object. An overloaded assignment
operator assigns the contents of an existing object to another existing
object of the same class.
First, you must know that a copy
constructor is one that has only one argument, which is a reference to the
same type as the constructor. The compiler invokes a copy constructor
wherever it needs to make a copy of the object, for example to pass an
argument by value. If you do not provide a copy constructor, the compiler
creates a member-by-member copy constructor for you.
You can write overloaded assignment
operators that take arguments of other classes, but that behavior is usually
implemented with implicit conversion constructors. If you do not provide an
overloaded assignment operator for the class, the compiler creates a default
member-by-member assignment operator.
20. What is a
virtual destructor?
The simple answer is that a virtual
destructor is one that is declared with the virtual attribute.
The behavior of a virtual destructor
is what is important. If you destroy an object through a pointer or reference
to a base class and the base-class destructor is not virtual, the
derived-class destructors are not executed, and the destruction might not be
complete.
21. When is a
template a better solution than a base class?
When you are designing a generic
class to contain or otherwise manage objects of other types, when the format
and behavior of those other types are unimportant to their containment or
management, and particularly when those other types are unknown (thus the generosity)
to the designer of the container or manager class.
Prior to templates, you had to use
inheritance; your design might include a generic List container class and an
application-specific Employee class. To put employees in a list, a ListedEmployee
class is multiple derived (contrived) from the Employee and List classes.
These solutions were unwieldy and error-prone. Templates solved that problem.
22. What is the
difference between C and C++? Would you prefer to use one over the other?
C is based on structured programming
whereas C++ supports the object-oriented programming paradigm. Due to the
advantages inherent in object-oriented programs such as modularity and reuse,
C++ is preferred. However almost anything that can be built using C++ can
also built using C.
23. What are the
access privileges in C++? What is the default access level?
The access privileges in C++ are
private, public and protected. The default access level assigned to members
of a class is private. Private members of a class are accessible only within
the class and by friends of the class. Protected members are accessible by
the class itself and its sub-classes. Public members of a class can be
accessed by anyone.
24. What is data encapsulation?
Data Encapsulation is also known as
data hiding. The most important advantage of encapsulation is that it lets
the programmer create an object and then provide an interface to the object
that other objects can use to call the methods provided by the object. The
programmer can change the internal workings of an object but this transparent
to other interfacing programs as long as the interface remains unchanged.
25. What is inheritance?
Inheritance is the process of
deriving classes from other classes. In such a case, the sub-class has an
‘is-a’ relationship with the super class. For e.g. vehicle can be a
super-class and car can be a sub-class derived from vehicle. In this case a
car is a vehicle. The super class ‘is not a’ sub-class as the sub- class is
more specialized and may contain additional members as compared to the super
class. The greatest advantage of inheritance is that it promotes generic
design and code reuse.
26. What is
multiple inheritance? What are its advantages and disadvantages?
Multiple inheritance is the process
whereby a sub-class can be derived from more than one super class. The
advantage of multiple inheritance is that it allows a class to inherit the
functionality of more than one base class thus allowing for modeling of
complex relationships. The disadvantage of multiple inheritance is that it
can lead to a lot of confusion when two base classes implement a method with
the same name.
27. What is polymorphism?
Polymorphism refers to the ability to
have more than one method with the same signature in an inheritance hierarchy.
The correct method is invoked at run-time based on the context (object) on
which the method is invoked. Polymorphism allows for a generic use of method
names while providing specialized implementations for them.
28. What do the keywords static and const signify?
When a class member is declared to be
of a static type, it means that the member is not an instance variable but a
class variable. Such a member is accessed using a class name. Member name (as
opposed to Object. member name). Const is a keyword used in C++ to specify
that an object’s value cannot be changed.
29. How is memory allocated / reallocated
in C ? How about C++ ?
Memory is allocated in C using malloc () and freed using free(). In C++ the new() operator is used to allocate memory to an object and the delete() operator is used to free the memory taken up by an object.
30. What is an explicit constructor?
A conversion constructor declared with the explicit keyword. The compiler does not use an explicit constructor to implement an implied conversion of types. Its purpose is reserved explicitly for construction.
31. What is the Standard Template
Library?
A library of container templates approved by the ANSI committee for inclusion in the standard C++ specification.
An applicant who then launches into a
discussion of the generic programming model, integrators, allocators,
algorithms, and such, has a higher than average understanding of the new
technology that STL brings to C++ programming.
32. Describe run-time type
identification?
The ability to determine at run time the type of an object by using the typed operator or the dynamic cast operator.
33. What problem does the namespace
feature solve?
Multiple providers of libraries might
use common global identifiers causing a name collision when an application
tries to link with two or more such libraries. The name-space feature
surrounds a library’s external declarations with a unique namespace that
eliminates the potential for those collisions.
This solution assumes that two
library vendors don’t use the same namespace, of course.
34. Are there any new intrinsic
(built-in) data types?
Yes. The ANSI committee added the bool intrinsic type and its true and false value keywords and the what data type to support character sets wider than eight bits.
Other apparent new types (string,
complex, and so forth) are implemented as classes in the Standard C++ Library
rather than as intrinsic types.
|