Oracle Frequently Asked C++ Interview Questions

Is It Possible For A Member Function To Use Delete This?

It is possible for a member function to use delete this but on certain conditions which are as follows

 Ensure that the allocation of this object is done through new[] operator.
Ensure that the invocation of a member function done on this (current) object will be the last member function.
Ensure that calling of other member functions and data members should not be done after the line of code which includes delete this.
Examination or comparison of this pointer with other pointers and NULL, printing or casting it, must be avoided after using the delete this.
The preceding points are applied in the cases where the this pointer belongs to the base class in the absence of the virtual destructor.

Discuss The Effects Occur, After An Exception Thrown By A Member Function Is Unspecified By An Exception Specification?

When a function throws an exception, not given in the specification, the exception is passed to a system function named unexpected. The unexpected function calls the latest function named as an argument in a call to the set_unexpected function, which returns its current settings. A function with no exception specification, by default, calls the terminate function, which finally calls the abort (function to terminate the program).

How Can I Be Thrown Polymorphically?

The following code can be used to throw i polymorphically

classExceptionParent { );
classE,cceptionChild : public ExceptionParent ( );
void f(ExceptionParent8 e)
/1
throw e;
void go
ExceptionChild e;
try(
fCc);
catch (ExceptionChild& e) (
//...code to handle ExceptlonChild...
catch C...) (
//...code to handle other exceptions...
)
)
In the preceding code, you can enter the catch (...) clause in the absence of throwing i polymorphically. The throw e in the function f () throws the same type of an object as an expression of static type.

What Is The Role Of Copy Constructor In Copying Of Thrown Objects?

A copy constructor with a public access specifier must be applied to the objects which are thrown.With the help of a compiler, the code is generated through which copying of thrown objects can be done. The thrown objects must have a copy constructor with the public access specifier.
Oracle Frequently Asked C++ Interview Questions Answers
Oracle Frequently Asked C++ Interview Questions Answers

How Can An Improvement In The Quality Of Software Be Done By Try/catch/throw?

Error-handling is necessity while developing applications to account for unexpected situations, such as insufficient memory, resource allocation errors, inability to find/open files, division by zero, an arithmetic or array overflow, and the exhaustion of free heap space, which occur at runtime.

Programmers have various styles of dealing with such exceptions, such as try/catch /throw methods, which cause diversity in coding practice. This diversity increases with the use of user-defined classes, as each class brings with it potential class-specific errors. These methods provide a standard facility to deal with runtime exceptions. Moreover, try/catch/throw result in the code with fewer errors. It is low in cost in relation to development. With error-handling, your program can detect unexpected events and recover from them.

What Is A Dangling Pointer?

When the location of the deallocated memory is pointed by the pointer even after the deletion or allocation of objects is done, without the modification in the value of the pointer, then this type of pointer is called a dangling pointer.

Explain The Concept Of Memory Leak.

When a variable does not exist longer in the memory, and deletion or reuse of that variable cannot be done, then its destruction occurs automatically. This concept is called memory leak.
For example, consider the following code snippet

{
parent*p=new parent();
}
In the preceding code snippet, the p variable does not exist in the memory, but the variable is not deleted. Therefore, it becomes out of scope and its destruction occurs, which results in memory leak.

List The Issue That The Auto_ptr Object Handles?

The auto_ptr object is used to deallocate memory, which is allocated to a variable, when the variable goes out of scope.

What Are Smart Pointers?

Smart pointers are almost similar to pointers with additional features, such as automatic destruction of a variable when it becomes out of scope and the throwing of exceptions that ensures the proper destruction of the dynamically allocated objects. They are useful in keeping tracks of dynamically allocated objects. Due to these additional capabilities, they reduce the possibilities of occurrence of exceptions and errors in a program and ensure that the written code is safe and efficient.

How A Pointer Differs From A Reference?

A pointer differs from a reference in the following ways

 In the case of reference, an object must always be referred while initializing. On the contrary, such restrictions are not meant for pointers.
The different types of objects can be pointed by the pointers by reassigning the pointers with different objects. On the contrary, in a reference, the same object which was initialized earlier can only be referred by a reference.
You can use a null address in a pointer parameter to indicate that a variable does not exist; whereas, there is no existence of a null reference in C++.
 A reference usually appears outside an object; whereas, a pointer generally appears inside an object.

How Const Int *ourpointer Differs From Int Const *ourpointer?

As a rule, pointer declarations should be read from right to left. In the pointer declaration, const int *ourPointer, ourPointer is a pointer to a const int object, which cannot be changed by using a pointer. Whereas in case of the int const *ourPointer pointer declaration, ourPointer is a const pointer to an int object, in which an int object can be changed by using a pointer but the pointer itself cannot be changed because it is constant.

Explain How Overloading Takes Place In C++?

C++ supports two types of overloading namely, function overloading and operator overloading. Function overloading helps in defining more than one function with the same name, but with different signatures. An error is raised if two overloaded functions are provided with the same function signature. Operator overloading helps in giving special meanings to operators, when they are used with user-defined classes.

What Is The Difference Between Prefix And Postfix Versions Of Operator++()?

The prefix and postfix versions of operator ++() can be differentiated on the basis of arguments defined. The postfix operator ++() consists of a dummy parameter of int datatype; whereas, a dummy parameter is not found in the prefix operator ++().

Describe The Advantages Of Operator Overloading?

Operator overloading is used to provide some extra features, behaviors, and abilities to the users of a particular class. This feature in C++ helps in controlling the functions performed by an operator and reduces the chance of occurrence of errors in a program.

Provide Some Examples Of Operator Overloading?

The implementation of operator overloading is done in the following ways

Concatenating two std:-.string objects by using the + operator
 Incrementing a Date object by using the ++ operator
Multiplying two different number objects by using the * operator
Accessing array elements from an object of the Array class by using the subscript operator

Can The Operator == Be Overloaded For Comparing Two Arrays Consisting Of Characters By Using String Comparison?

The operator == cannot be overloaded to compare two arrays consisting of characters using string comparisons. It should be noted that out of the two operands of an overloaded operator, at least one operand should be of user- defined type. This user-defined type usually refers to a class. Two characters can be compared easily using classes, such as std::string, rather than using an array containing characters.

Can The Creation Of Operator** Is Allowed To Perform The To-the-power-of Operations?

No, you cannot create operator** for to-the-power-of operations. The number of parameters taken by an operator, names of the operators, priority level of the operators, and the associativity of the operators depend on language in which they are being used. The operator** is not present in C++, so it cannot be created.

What Is The Main Purpose Of Overloading Operators?

The main purpose of operator overloading is to minimize the chances of occurrence of errors in a class that is using the overloaded operators. It also helps in redefining the functionalities of the operators to improve their performance. Operator overloading also makes the program clearer, readable, and more understandable by using common operators, such as +, =, and [].

Specify Some Guidelines That Should Be Followed While Overloading Operators?

Following are some of the guidelines that should be followed while overloading operators

 Subscript bracket operators should be used for overloading when there is a need of fetching data from the container class.
Arithmetic operators should be used for providing the numerical calculation to the operators.
Comma operator overloading should be used less often as the ordering properties of this operator vary before and after overloading. This variation in the ordering properties confuses the users of this operator.
The priority order in which operators are executed cannot be modified by overloading the operators.
The overloaded operators must follow the syntax of the language in which they are used.

Explain The Concept Of Friend Function In C++?

The friend function in C++ refers to a class or function that works with the private or protected members of the other class. It gets privileges to access and work with the private members of the other class. The programmer has full control over both the friend and member functions of the class and can use the features of both. The friend function does not require the use of an object and can be invoked without creating the object.

How The Programmer Of A Class Should Decide Whether To Declare Member Function Or A Friend Function?

A programmer should analyze the situations or requirements for deciding whether to declare the member function or friend function for a class. When a function is declared as a friend, the function is able to access all the private and protected member of the class. A member function can be used with encapsulation point of view as friend functions violate the encapsulation and can also access all the private members although they are not a part of the class. From the security point of view, use of member function is safer than the friend function.

Why Should We Use Null Or Zero In A Program?

In C++, <cstdio> header defines NULL, a global symbol that represents a null pointer. NULL has nothing to do with standard input/output except that some functions return a null pointer. C++ programmers do not use the NULL global symbol, preferring to address zero pointer values with the constant integer value 0.

Another problem is that ignoring a 0 return could crash the system when the program tries to assign values through a zero-value pointer.

Write Code That Allows To Create Only One Instance Of A Class?

This is shown in following code snippet.

#include
class sample
{
    static sample *ptr ;
    private
    sample( )
    {
    }
    public
    static sample* create( )
    {
       if ( ptr == NULL )
          ptr = new sample ;
          return ptr ;
     }
} ;
sample *sample::ptr = NULL ;
void main( )
{
    sample *a = sample::create( ) ;
    sample *b = sample::create( ) ;
}
Here, the class sample contains a static data member ptr, which is a pointer to the object of same class. The constructor is private which avoids us from creating objects outside the class. A static member function called create( ) is used to create an object of the class. In this function the condition is checked whether or not ptr is NULL, if it is then an object is created dynamically and its address collected in ptr is returned. If ptr is not NULL, then the same address is returned. Thus, in main( ) on execution of the first statement one object of sample gets created whereas on execution of second statement, b holds the address of the first object. Thus, whatever number of times you call create( ) function, only one object of sample class will be available.

Write Code To Add Functions, Which Would Work As Get And Put Properties Of A Class?

This is shown in following code.

#include

class sample
{
   int data ;
   public
      __declspec ( property ( put = fun1, get = fun2 ) )
      int x ;
      void fun1 ( int i )
      {
         if ( i < 0 )
            data = 0 ;
         else
            data = i ;
       }
       int fun2( )
       {
          return data ;
       }
} ;

void main( )
{
    sample a ;
    a.x = -99 ;
    cout << a.x ;
}
Here, the function fun1( ) of class sample is used to set the given integer value into data, whereasfun2( ) returns the current value of data. To set these functions as properties of a class we havegiven the statement as shown below

 __declspec ( property ( put = fun1, get = fun2 )) int x ;
As a result, the statement a.x = -99 ; would cause fun1( ) to get called to set the value in data. On the other hand, the last statement would cause fun2( ) to get called to return the value of data.

Discuss The Possibilities Related To The Termination Of A Program Before Entering The Mainq Method?

The global variables are initialized dynamically before invoking the main() method. The process of invoking the global variables is slow. If the function is called by initialization of the global variables, then the program is terminated before entering the main() method.

Post a Comment

Previous Post Next Post