Programming with C++ Test Answers
·
1. Which of the following operators
cannot be overloaded?
Answers:
• +=
• >>
• <
• .
• ::
• &&
• =
• ?:
2. Which of the following statements about
constructors and destructors are true?
Answers:
• In a given
class, constructors are always required to be defined, but destructors are not
• Neither
constructors nor destructors can take parameters
• Constructors can take
parameters, but destructors cannot
• It is illegal
to define a destructor as virtual
• It is illegal to define a
constructor as virtual
• Both explicitly
declared constructors and explicitly declared destructors are required in a
class
3. Which of the following statements are true
for operator overloading in C++?
Answers:
• The * operator
can be overloaded to perform division
• The * operator can be
overloaded to perform assignment
• ** can be
overloaded to perform "to the power of"
• Operators can
be overloaded only in inside classes
• Operators can be
overloaded globally
4. Consider the sample code given below and
answer the question that follows.
class X {
int i;
protected:
float f;
public:
char c;
};
class Y : private X { };
Referring to the sample code above, which of
the following data members of X are accessible from class Y
Answers:
• c
• f
• i
• None of the
above
5. Consider the following code:
class Animal
{
private:
int weight;
public:
Animal()
{
}
virtual void Speak()
{
cout << "Animal speaking";
}
};
class Snake : public Animal
{
private:
int length;
public:
Snake()
{
}
void Speak()
{
cout << "Snake speaking\r\n";
}
};
int main()
{
Animal *array = new
Snake[10];
for (int index= 0; index
< 10; index++)
{
array->Speak();
array++;
}
return 0;
}
What happens when the above code is compiled
and executed?
Answers:
• The code will
generate compilation errors
• The code will
compile and run fine. "Animal speaking" will be printed to the output
• The code will compile and
run fine. "Snake speaking" will be printed to the output
• The code will
crash at runtime
6. Consider the sample code given below and
answer the question that follows.
class A
{
public:
A() {}
~A()
{
cout << "in destructor"
<< endl;
}
};
void main()
{
A a;
a.~A();
}
How many times will "in destructor"
be output when the above code is compiled and executed?
Answers:
• 0
• 1
• 2
• A compile time
error will be generated because destructors cannot be called directly
7. Consider the sample code given below and
answer the question that follows.
class Outer
{
public:
class Inner
{
int
Count;
public:
Inner(){};
};
};
int main()
{
Inner innerObject;
Outer outObject;
return 0;
}
What will be the result when the above code is
compiled?
Answers:
• The code will
compile fine
• There will be
errors because classes cannot be defined inside other classes
• There will be
an error because Outer does not define a constructor
• There will be an error
because in the declaration of innerObject the type Inner must be qualified by
Outer
• There will be
no errors but a warning that Inner and Outer do not have destructors
8. Which of the following statements are FALSE
with regard to destructors
Answers:
• A derived class
can call the destructor of the parent class explicitly
• A class may
have only one destructor
• Destructors
cannot be invoked directly
• The return type
for a destructor is void
• Destructors cannot accept
arguments
9. Consider the sample code given below and
answer the question that follows.
1 class Car
2 {
3 private:
4 int Wheels;
5
6 public:
7 Car(int wheels = 0)
8 : Wheels(wheels)
9 {
10 }
11
12 int GetWheels()
13 {
14 return Wheels;
15 }
16 };
17 main()
18 {
19 Car c(4);
20 cout << "No of wheels:"
<< c.GetWheels();
21 }
Which of the following lines from the sample
code above are examples of data member definition?
Answers:
• 4
• 7
• 8
• 14
• 19
10. Consider the following statements relating
to static member functions and choose the appropriate options:
1. They have external linkage
2. They do not have 'this' pointers
3. They can be declared as virtual
4. They can have the same name as a non-static
function that has the same argument types
Answers:
• All are true
• Only 1, 2 and 4
are true
• Only 1 and 2 are true
• Only 1,3 and 4
are true
• All are false
11. What access specifier allows only the
class or a derived class to access a data member
Answers:
• private
• protected
• default
• virtual
• public
12. Consider the line of code given below and
answer the question that follows.
class screen;
Which of the following statements are true
about the class declaration above?
Answers:
• Incorrect
syntax. The body of the class declaration is missing
• Incorrect
syntax. {}; is missing
• The syntax is correct
• Incorrect
syntax. {} is missing
• Incorrect
syntax. Requires a *
13. What will be the output of the following
code?
class b
{
int i;
public:
virtual void vfoo()
{
cout <<"Base
";
}
};
class d1 : public b
{
int j;
public:
void vfoo()
{
j++;
cout
<<"Derived";
}
};
class d2 : public d1
{
int k;
};
void main()
{
b *p, ob;
d2 ob2;
p = &ob;
p->vfoo();
p = &ob2;
p->vfoo();
}
Answers:
• Base Base
• Base Derived
• Derived Base
• Derived Derived
14. Consider the sample code given below and
answer the question that follows.
class Shape
{
public:
virtual void draw() = 0;
};
class Rectangle: public Shape
{
public:
void draw()
{
// Code to draw rectangle
}
//Some more member functions.....
};
class Circle : public Shape
{
public:
void draw()
{
// Code to draw circle
}
//Some more member functions.....
};
int main()
{
Shape objShape;
objShape.draw();
}
What happens if the above program is compiled
and executed?
Answers:
• Object objShape
of Shape class will be created
• A compile time error will
be generated because you cannot declare Shape objects
• A compile time
error will be generated because you cannot call draw function of class 'Shape'
• A compile time
error will be generated because the derived class's draw() function cannot
override the base class draw() function
• None of the
above
15. Which of the following is NOT a standard
sorting algorithm:
Answers:
• std::sort
• std::qsort
•
std::stable_sort
•
std::partial_sort
16. Consider the sample code given below and
answer the question that follows.
class Person
{
string name;
int age;
Person *spouse;
public:
Person(string sName);
Person(string sName, int
nAge);
Person(const Person&
p);
Copy(Person *p);
Copy(const Person &p);
SetSpouse(Person *s);
};
Which one of the following are declarations
for a copy constructor?
Answers:
• Person(string
sName);
• Person(string
sName, int nAge);
• Copy(Person
*p);
• Person(const Person
&p);
• Copy(const
Person &p)?
17. Consider two classes A and B:
class A
{
private:
int x;
float y;
public:
friend class B;
};
class B
{
};
Which of the following is true?
Answers:
• A can access
all private data members of B
• B can access all private
data members of A
• A cannot access
the private members of B
• B cannot access
the private members of A
• Both A and B
can access each other's private data members
18. Consider the following code:
class BaseException
{
public:
virtual void Output()
{
cout <<
"Base Exception" << endl;
}
};
class DerivedException : public BaseException
{
public:
virtual void Output()
{
cout <<
"Derived Exception" << endl;
}
};
void ExceptionTest()
{
try
{
throw new
DerivedException();
}
catch (DerivedException ex)
{
ex.Output();
}
catch (...)
{
cout <<
"Unknown Exception Thrown!" << endl;
}
}
Invoking Exception Test will result in which
output?
Answers:
• Base Exception
• Derived
Exception
• Unknown Exception Thrown
• No Output will
be generated
19. Which of the following statements are true
about C++ vector class?
Answers:
• vector::empty
deletes all elements of the vector
• vector::erase
can be used to delete a single element and a range of elements of the vector
• After calling,
vector::erase causes some of the iterators referencing the vector to become
invalid
• vector::count
returns the number of elements in the vector
• vector::size returns the
number of elements in the vector
•
vector::capacity returns the number of elements in the vector
20. Consider the following code:
class BaseException
{
public:
virtual void Output()
{
cout << "Base
Exception" << endl;
}
};
class DerivedException : public BaseException
{
public:
virtual void Output()
{
cout << "Derived
Exception" << endl;
}
};
void ExceptionTest()
{
try
{
throw DerivedException();
}
catch (BaseException ex)
{
ex.Output();
}
catch (...)
{
cout << "Unknown Exception Thrown!" << endl;
}
}
Invoking Exception Test will result in which
output?
Answers:
• Base Exception
• Derived
Exception
• Unknown
Exception Thrown
• No Output will
be generated
21. Which of the following statements are
true?
Answers:
• Inline
functions should be preferred over macros because inline functions have better
performance
• Macro usage
should be avoided because they are error prone
• Normal
functions should be preferred over macros because normal functions have better
performance
• Macro usage should be
avoided because macros do not perform type checking
• Inline
functions should be preferred over macros because inline functions perform type
checking
22. Base class members are made accessible to
a derived class and inaccessible to rest of the program by _____.
Answers:
• public access
specifier
• private access
specifier
• protected access specifier
• friend access
specifier
23. Which of the following are NOT valid C++
casts
Answers:
• dynamic_cast
•
reinterpret_cast
• static_cast
• const_cast
• void_cast
24. Sample Code
typedef char *monthTable[3];
Referring to the code above, which of the
following choices creates two monthTable arrays and initializes one of the two?
Answers:
•
monthTable(winter,spring={"March","April","May"});
• monthTable
winter, spring;
• monthTable,
winter, spring;
• monthTable,
winter,spring={"March","April","May"};
• monthTable
winter,spring={"March","April","May"};
25. Consider the sample code given below and
answer the question that follows.
class Person
{
public:
Person();
virtual
~Person();
};
class Student : public Person
{
public:
Student();
~Student();
};
main()
{
Person *p = new Student();
delete p;
}
Why is the keyword "virtual" added
before the Person destructor?
Answers:
• To make it
impossible for this particular destructor to be overloaded
• To ensure that
correct destructor is called when p is deleted
• To ensure that the
destructors are called in proper order
• To improve the
speed of class Person's destruction
• To prevent the
Person class from being instantiated directly making it an abstract base class
26. Consider the following code:
template<class T> void Kill(T *&
objPtr)
{
delete objPtr;
objPtr = NULL;
}
class MyClass
{
};
void Test()
{
MyClass *ptr = new MyClass();
Kill(ptr);
Kill(ptr);
}
Invoking Test() will cause which of the
following?
Answers:
• Code will Crash
or Throw and Exception
• Code will
Execute, but there will be a memory leak
• Code will execute properly
• Code will
exhibit undefined behavior
27. Consider the following class hierarchy:
class Base
{
}
class Derived : public Base
{
}
Which of the following are true?
Answers:
• The
relationship between the Base and Derived can be described as: Base is a
Derived
• The
relationship between the Base and Derived can be described as: Base has a Derived
• Derived can
access only public member functions of Base
• Derived can
access public and protected member functions of Base
• The following line of code
is valid: Base *object = new Derived();
28. What linkage specifier do you use in order
to cause your C++ functions to have C linkage
Answers:
• extern "C"
• extern C
• _stdcall
• _cdecl
• _fastcall?
29. Which of the following techniques should
you use to handle a destructor that fails?
Answers:
• Return an error
code from the destructor
• Throw an exception
from the destructor
• Write the error
to a log file
• Use
"delete this;" in the destructor
• None of the above
30. Which of the following techniques should
you use to handle a constructor that fails?
Answers:
• Return an error
code from the constructor
• Throw an exception from
the constructor
• Write the error
to a log file
• Use
"delete this;" in the constructor
• None of the
above
31. Which of the following statements about
function overloading, is true?
Answers:
• C++ and
namespaces should be used to replace occurrences of function overloading
• Overloaded
functions may not be declared as "inline"
• Although the
return types and parameter types of overloaded functions can be different, the
actual number of parameters cannot change
• Function overloading is
possible in both C and C++
• The parameter
lists and const keyword are used to distinguish functions of the same name
declared in the same scope
32. Consider the following code:
#include<stdio.h>
int main(int argc, char* argv[])
{
enum Colors
{
red,
blue,
white = 5,
yellow,
green,
pink
};
Colors color = green;
printf("%d", color);
return 0;
}
What will be the output when the above code is
compiled and executed?
Answers:
• 4
• 5
• 6
• 7
• 8
• 9
• The code will
have compile time errors
33. Consider the following code:
class A {
typedef int I; // private member
I f();
friend I g(I);
static I x;
};
Which of the following are valid:
Answers:
• A::I A::f() { return 0; }
• A::I g(A::I p =
A::x);
• A::I g(A::I p)
{ return 0; }
• A::I A::x = 0;
34. In the given sample Code, is the constructor
definition valid?
class someclass
{
int var1, var2;
public:
someclass(int
num1, int num2) : var1(num1), var2(num2)
{
}
};
Answers:
• Yes, it is valid
• No, we cannot
assign values like this
• No, the
parenthesis cannot be empty
• No, var1 and
var2 are not functions but are variables
35. Consider the following code:
class BaseException
{
public:
virtual void Output()
{
cout <<
"Base Exception" << endl;
}
};
class DerivedException : public BaseException
{
public:
virtual void Output()
{
cout <<
"Derived Exception" << endl;
}
};
void ExceptionTest()
{
try
{
throw
DerivedException();
}
catch (BaseException& ex)
{
ex.Output();
}
catch (...)
{
cout <<
"Unknown Exception Thrown!" << endl;
}
}
Invoking Exception Test will result in which
output?
Answers:
• Base Exception
• Derived Exception
• Unknown
Exception Thrown
• No Output will
be generated
36. Consider the following code:
#define SQ(a) (a*a)
int answer = SQ(2 + 3);
What will be the value of answer after the
above code executes?
Answers:
• 10
• 11
• 25
• 13
• None of the
above
37. Consider the following class hierarchy:
class Base
{
}
class Derived : private Base
{
}
Which of the following are true?
Answers:
• The relation
between Base and Derived can be described as: Base is a Derived
• The relation
between Base and Derived can be described as: Base has a Derived
• Derived can
access private member functions of Base
• Derived can access public
and protected member functions of Base
38. Consider the sample code given below and
answer the question that follows:
char **foo;
/* Missing code goes here */
for(int i = 0; i < 200; i++)
{
foo[i] = new char[100];
}
Referring to the sample code above, what is
the missing line of code?
Answers:
• foo = new
*char[200];
• foo = new
char[200];
• foo = new
char[200]*;
• foo = new char*[200];
• foo = new
char[][200];
39. What will be the output of the following
code?
class A
{
public:
A():pData(0){}
~A(){}
int operator
++()
{
pData++;
cout << "In first ";
return pData;
}
int operator
++(int)
{
pData++;
cout << "In second ";
return pData;
}
private:
int pData;
};
void main()
{
A a;
cout << a++;
cout << ++a;
}
Answers:
• In first 1 In
second 2
• In second 1 In first 2
• In first 0 In
second 2
• In second 0 In
first 2
40. Which of the following are true about
class member functions and constructors?
Answers:
• A constructor
can return values but a member function cannot
• A member
function can declare local variables but a constructor cannot
• A member function can
return values but a constructor cannot
• A constructor
can declare local variables but a member function cannot
• A member
function can throw exceptions but a constructor cannot
41. How many arguments can be passed to an
overloaded binary operator?
Answers:
• 4
• 3
• 2
• 1
• 0
42. What will happen when the following code
is compiled and executed?
#include<iostream>
using namespace std;
class myclass
{
private:
int number;
public:
myclass()
{
number = 2;
}
int &a()
{
return number;
}
};
int main()
{
myclass m1,m2;
m1.a() = 5;
m2.a() = m1.a();
cout << m2.a();
return 0;
}
Answers:
• Compile time
errors will be generated because right hand side of expressions cannot be
functions
• The printed output will be
5
• The printed
output will be 2
• The printed
output will be undefined
43. You want the data member of a class to be
accessed only by itself and by the class derived from it. Which access
specifier will you give to the data member?
Answers:
• Public
• Private
• Protected
• Friend
• Either Public
or Friend
44. If input and output operations have to be
performed on a file, an object of the _______ class should be created.
Answers:
• fstream
• iostream
• ostream
• istream
• None
45. State which of the following is true.
Answers:
• Function templates in C++
are used to create a set of functions that apply the same algorithm to
different data types
• Classes in C++
are used to develop a set of type-safe classes
• C++ is useful
for developing collection classes
• C++ is useful
for developing smart pointers
• All of the
above
46. Consider the sample code given below and
answer the question that follows.
class SomeClass
{
int x;
public:
SomeClass (int xx) : x(xx) {}
};
SomeClass x(10);
SomeClass y(x);
What is wrong with the sample code above?
Answers:
• SomeClass y(x);
will generate an error because SomeClass has no copy constructor
• SomeClass y(x);
will generate an error because SomeClass has no default constructor
• SomeClass y(x);
will generate an error because SomeClass has no public copy constructor
• x(xx) will
generate an error because it is illegal to initialize an int with that syntax
• The code will compile
without errors
47. Which of the following statements
regarding functions are false?
Answers:
• Functions can
be overloaded
• Functions can
return the type void
• Inline
functions are expanded during compile time to avoid invocation overhead
• You can create arrays of
functions
• You can pass
values to functions by reference arguments
• You can return
values from functions by reference arguments
• A function can
return a pointer
48. State whether True or False.
Unary operator overloaded by means of a friend
function takes one reference argument.
Answers:
• True
• False
49. What does ADT stand for?
Answers:
• Accessible
derived type
• Access to
derived type
• Abstract data type
• Abstract
derived type
• Accessible data
type
50. A pure virtual function can be declared by
_______.
Answers:
• equating it to
1
• equating it to 0
• equating it to
NULL
• the 'pure'
keyword
• the 'abstract'
keyword
51. Which of the following are true about
class and struct in C++:
Answers:
• A class can
have destructor but a struct cannot
• A class can
have inheritance but a struct cannot
• In a class all
members are public by default, whereas in struct all members are private by default
• In a class all members are
private by default, whereas in struct all members are public by default
52. What is the output of the following code
segment?
int n = 9;
int *p;
p=&n;
n++;
cout << *p+2 << ","
<< n;
Answers:
• 11,9
• 9,10
• 12,10
• 11,10
53. What will be the output of the following
code?
#include<iostream>
using namespace std;
class b
{
int i;
public:
void vfoo()
{ cout <<"In Base "; }
};
class d : public b
{
int j;
public:
void vfoo()
{
cout<<"In Derived ";
}
};
void main()
{
b *p, ob;
d ob2;
p = &ob;
p->vfoo();
p = &ob2;
p->vfoo();
ob2.vfoo();
}
Answers:
• In Base In Base In Derived
• In Base In
Derived In Derived
• In Derived In
Derived In Derived
• In Derived In
Base In Derived
• In Base In Base
In Base
54. Which of the following sets of functions
do not qualify as overloaded functions?
Answers:
• void fun(int,
char *) void fun(char *,int)
• void x(int,char) int
*x(int,char)
• int get(int)
int get(int,int)
• void F(int *)
void F(float *)
• All of the
above are overloaded functions
55. Consider the sample code given below and
answer the question that follows.
template <class T> Run(T process);
Which one of the following is an example of
the sample code given above?
Answers:
• A non-template
member function
• A template
function definition
• A template function
declaration
• A template
class definition
• A template
class declaration
56. Suppose MyClass is a class that defines a
copy constructor and overloads the assignment operator. In which of the
following cases will the copy constructor of MyClass be called?
Answers:
• When an object
of MyClass is passed by value to a function
• When an object
of MyClass is returned by value from a function
• MyClass
object1; MyClass object2; object2 = object1;
• MyClass object1; MyClass
*object2 = new MyClass(object1);
• MyClass
object1; MyClass object2 = object1;
57. Which of the following STL classes is
deprecated (ie should no longer be used)
Answers:
• ostrstream
• ostringstream
• ostream
• wostream
58. Which of the following is a function
that returns a non zero value to indicate an I/O stream error?
Answers:
• bad
• good
• fail
• eof
• err
• error
• filerror
• None of the
above
59. Consider the following code:
#include<iostream>
using namespace std;
class A
{
public:
A()
{
cout << "Constructor
of A\n";
};
~A()
{
cout <<
"Destructor of A\n";
};
};
class B
{
public:
B()
{
cout <<
"Constructor of B\n";
};
~B()
{
cout <<
"Destructor of B\n";
};
};
class C
{
public:
A objA;
B objB;
};
int main()
{
C *pC;
pC = new C();
delete pC;
return 0;
}
What will be the printed output?
Answers:
• Constructor of
B Constructor of A Destructor of A Destructor of B
• Constructor of A
Constructor of B Destructor of B Destructor of A
• Constructor of
B Constructor of A Destructor of B Destructor of A
• Constructor of
A Constructor of B Destructor of A Destructor of B
• The sequence of
construction and destruction of A and B will be compiler specific
60. Which of the following is not a standard
STL header?
Answers:
• <array>
• <deque>
• <queue>
• <list>
61. Which of the following member functions
can be used to add an element in an std::vector?
Answers:
• add
• front
• push
• push_back
62. Which of the following is a predefined
object in C++ and used to insert to the standard error output?
Answers:
• std::err
• std::error
• std::cerror
• std::cerr
• std::cin
• std::clog
63. Consider the following code:
#include<iostream>
using namespace std;
int main()
{
cout << "The value of __LINE__ is
" <<__LINE__;
return 0;
}
What will be the result when the above code is
compiled and executed?
Answers:
• The compilation
will fail with the error - '__LINE__' : undeclared identifier
• The compilation
will fail with the error - '__LINE__' unresolved identifier
• The code will compile and
run without errors
• The code will
crash at runtime
64. In C++, the keyword auto can be used for:
Answers:
• Automatic
assignment of data to objects during instantiation
• Automatic call
of a function
• Declaration of
a local variable
• Automatically
erasing an object when it is no longer needed
• Automatic
handling of run-time errors in the program
• Automatic
termination of a program in case the user does not respond within a given time
period
• Automatic creation of
variables
65. If a matching catch handler (or ellipsis
catch handler) cannot be found for the current exception, then the following
predefined runtime function is called ______.
Answers:
• abort
• set_terminate
• terminate
• close