
Lists of Long Descriptive type Questions that may be asked in this format in Written Exams.
- 1. Explain basic concept of class
- 2. Explain memory allocation of objects with example
- 3. Explain Public and Private Access modifier (specifier) for C++ classes
- 4. Explain Static data members and static member functions with example
- 5. What is constructor? List out characteristics of constructors
- 6. Explain types of constructor with example.
- 7. Explain destructor with example.
- 8. Explain use of objects as function arguments with example.
- 9. Explain operator overloading with example
- 10. List out various type conversion techniques? Explain basic to class type conversion with example.
- 11. Explain type conversion for class to basic type with example..
- 12. Explain type conversion for class type to another class type with example.
Question – 1. Explain basic concept of class.
- A class is a template that specifies the attributes and behavior of things or objects.
- A class is a blueprint or prototype from which objects are created.
- A class is the implementation of an abstract data type (ADT).
- It defines attributes and methods.
Object declaration:
- In following example class employee is created and ‘a’ is object of this class.
class item { // data members and member functions }a;
In above syntax class name is item, and a is object of that class
Object declaration can be also done in main() function as follows:
int main() { item a; }
Accessing class member:
- Private members of the class can only accessed by the members with in that class.
- Public members of the class can be accessed outside the class also.
- For accessing class member outside class can be done by using dot operator and object of that class using following syntax, object-name.function-name(actual-arguments);
- Member functions of the class can be declared outside class definition also as follows,
Syntax:
class item { public: void getdata(); }; void item::getdata();
Example:
#include<iostream> using namespace std; class employee // class { char name[10]; // data member int id; // data member public: void getdata(); // prototype declaration void putdata(); // prototype declaration }; void employee::getdata() // member function { cout<<”Enter name and id of employee: ”; cin>>name>>id; } void employee::putdata() // member function { cout<<”Display name and id of employee: ”; cout<<name<<id; } int main() { employee x; x.getdata(); x.putdata(); }
Question – 2. Explain memory allocation of objects with example.
- The member functions are created and placed in the memory space only once when they are defined as part of a class specification.
- No separate space is allocated for member functions when the objects are created.
- Only space for member variable is allocated separately for each object.
- A separate memory location for the objects happens, because the member variables will hold different data values for different objects.
Example:
class item { public: int id, cost; void getdata(); }; int main() { item x,y,z; }
- In above example each object x, y and z has separate space for both id and cost.
- Means value of id and cost can be different for each object.
- But no default space is allocated to function when object is declared.
- Required separate space is allocated to function during calling of that function.
Question – 3. Explain Public and Private Access modifier (specifier) for C++ classes.
Public:
- Public members of the class are accessible by any program from anywhere.
- There are no restrictions for accessing public members of a class.
- Class members that allow manipulating or accessing the class data are made public.
Private:
- Private members of the class can be accessed within the class and from member functions of the class.
- They cannot be accessed outside the class or from other programs, not even from inherited class.
- Encapsulation is possible due to the private access modifier.
- If one tries to access the private members outside the class then it results in a compile time error.
- If any other access modifier is not specified then member default acts as Private member.
Example:
#include<iostream> using namespace std; class ABC { public: int a; private: int b; }; int main() { ABC x; x.a=5; cout<<"Value of public variable = "<<x.a; }
Output:
5
- In above program b is private member of class ABC.
- So we cannot use it with object of ABC outside the class, Means we cannot use x.b in main as x.a shown above.
Question – 4. Explain Static data members and static member functions with example
Static data members:
- Data members of the class which are shared by all objects are known as static data members.
- Only one copy of a static variable is maintained by the class and it is common for all objects.
- Static members are declared inside the class and defined outside the class.
- It is initialized to zero when the first object of its class is created. No other initialization is permitted.
- It is visible only within the class but its lifetime is the entire program.
- Static members are generally used to maintain values common to the entire class.
Static member functions:
- Static member functions are associated with a class, not with any object.
- They can be invoked using class name, not object.
- They can access only static members of the class.
- They cannot be virtual.
- They cannot be declared as constant or volatile.
- A static member function can be called, even when a class is not instantiated.
- There cannot be static and non-static version of the same function.
- A static member function does not have this pointer.
Example:
#include<iostream> using namespace std; class item { int number; static int count; // static variable declaration public: void getdata(int a) { number = a; count++; } static void getcount() // the only difference from above program { cout<<”value of count: “<<count; } }; int item :: count; // static variable definition int main() { item a,b,c; a.getdata(100); b.getdata(200); c.getdata(300); a.getcount(); b.getcount(); c.getcount(); getch(); return 0; }
Output:
value of count:3
value of count:3
value of count:3
Question – 5. What is constructor? List out characteristics of constructors
- A constructor is a “special” member function which initializes the objects of class. Properties of constructor:
- Constructor is invoked automatically whenever an object of class is created.
- Constructor name must be same as class name.
- Constructors should be declared in the public section because private constructor cannot be invoked outside the class so they are useless.
- Constructors do not have return types and they cannot return values, not even void.
- Constructors cannot be inherited, even though a derived class can call the base class constructor.
- Constructors cannot be virtual.
- An object with a constructor cannot be used as a member of a union.
- They make implicit calls to the operators new and delete when memory allocation is required.
Question – 6. Explain types of constructor with example.
There are mainly three types of constructors as follows:
- Default constructor:
- Default constructor is the one which invokes by default when object of the class is created.
- It is generally used to initialize the value of the data members.
- It is also called no argument constructor.
Example:
class integar { int m,n; public: integer() // Default constructor { m=n=0; } };
- Parameterized constructor
- Constructors that can take arguments are called parameterized constructors.
- Sometimes it is necessary to initialize the various data elements of different objects with different values when they are created.
- We can achieve this objective by passing arguments to the constructor function when the objects are created.
Example:
class integer { int m,n; public: integer(int x,int y) // Parameterized constructor { m =x; n=y; } };
- Copy constructor
- A copy constructor is used to declare and initialize an object from another object.
- For example, integer(integer &i); OR integer I2(I1);
- Constructor which accepts a reference to its own class as a parameter is called copy constructor.
Example:
class integer { int m, n; public: integer(rectangle &x) // Copy constructor { m = x.m; n = x.n; } };
Example:
#include<iostream> using namespace std; class rectangle { int length, width; public: rectangle() // Default constructor { length=0; width=0; } rectangle(int _length, int _width) // Parameterized constructor { length = _length; width = _width; } rectangle(rectangle &_r) // Copy constructor { length = _r.length; width = _r.width; } ……………………………… // other functions for reading, writing and processing can be written here ……………………………… }; int main() { rectangle r1; // Invokes default constructor rectangle r2(10,10); // Invokes parameterized constructor rectangle r3(r2); // Invokes copy constructor }
Question – 7. Explain destructor with example.
Destructor is used to destroy the objects that have been created by a constructor.
- Destructor is a member function whose name must be same as class name but is preceded by a tilde (~).
- Destructor never takes any argument nor it returns any value nor it has return type.
- Destructor is invoked automatically by the complier upon exit from the program.
- Destructor should be declared in the public section
Example:
#include<iostream.h> using namespace std; class rectangle { int length, width; public: rectangle() //Constructor { length=0; width=0; } ~rectangle() //Destructor { } // other functions for reading, writing and processing can be written here }; int main() { rectanble x; // default constructor is called for this object }
Question – 8. Explain use of objects as function arguments with example.
Like any other data type function may be used as a function argument. It can be done in following two ways:
- A copy of the entire object is passed to the function
- This method is call pass by value.
- Since copy of the object is passed to the function, any changes made to the object inside the function do not affect the object used to call the function.
- Only the address of the object is transferred to the function.
- This method is called pass-by-reference.
- When an address of the object is passed, the called function works directly on the actual object used in the call.
- This means that any changes made to the object inside the function will reflect in the actual object.
- This method is more efficient because it requires passing only addresses of the object, not an entire object.
Example:
#include<iostream> using namespace std; clas time { int hours; int minutes; public: void gettime(int h, int m) { hours=h; minutes=m; } void puttime(void) { cout<<hours<<” hours and”; cout<<minutes<<”minutes”<<”\n”; } void sum(time, time); //declaration with objects as arguments }; void time::sum(time t1, time t2) //t1,t2 are objects { minutes = t1.minutes + t2.minutes; hours = minutes/60; minutes = minutes % 60; hours =hours + t1.hours + t2.hours; } int main() { time t1, t2, t3; t1.gettime(2,45); //get t1 t2.gettime(3,30); //get t2 t3.sum(t1,t2); //t3 = t1 + t2 cout<<”t1 = ”; t1.puttime(); //display t1 cout<<”t2 = ”; t2.puttime(); //display t2 cout<<”t3 = ”; t3.puttime(); //display t3 return 0; }
Question – 9. Explain operator overloading with example.
- Operator overloading is compile time polymorphism.
- The operator overloading provides mechanism to perform operations on user defined data type.
- We can give special meaning to any operators in which program it is implemented.
- Rules for operator overloading
- Only existing operator can be overloaded.
- The overloaded operator must have at least one operand that is user defined type.
- We cannot change the basic meaning and syntax of an operator.
- We cannot use friend function to overload certain operators.
- Unary operators, overloaded by means of a member function, take no explicit arguments and return no explicit value, But, those overloaded by means of a friend function, take one reference argument.
- Binary operators overloaded through a member function take one explicit argument and those which are overloaded through a friend function take two explicit arguments.
- When using binary operators overloaded through a member function, the left hand operand must be an object of the relevant class.
- We cannot overload following operators.
Operator | Name |
. and .* | Class member access operator |
:: | Scope Resolution Operator |
sizeof() | Size Operator |
?: | Conditional Operator |
Example for Unary Operator Overloading
#include <iostream> using namespace std; class sample { int a,b; public: void getdata() { a=10; b=20; } void operator -() //Unary Member Function { a = a - 5; b = b - 5; } void disp() { cout<<"\nThe value of a="<<a; cout<<"\nThe value of b="<<b; } }; int main() { sample S; S.getdata(); -S; //Call Unary Member Function S.disp(); getch(); return 0; }
Output:
The value of a=5
The value of b=15
Example for Unary Operator Overloading using Friend function.
#include <iostream> using namespace std; class sample { int a,b; public: void getdata() { a=10; b=20; } friend sample operator +(sample A) //Unary Friend Function { A.a = A.a + 5; A.b = A.b + 5; return A; } void disp() { cout<<"\nThe value of a="<<a; cout<<"\nThe value of b="<<b; } }; int main() { sample S; S.getdata(); S=+S; //Call Unary Friend Function S.disp(); return 0; }
Output:
The value of a=15
The value of b=25
Example for Binary Operator Overloading
#include <iostream> using namespace std; class complex { float real, imag; public: complex(float _real, float _imag) // constructor { real = _real; imag = _imag; } void disp() { cout<<"The value of real="<<real; cout<<"The value of imag="<<imag; } void operator +(complex c) //Binary Member function { real = real + c.real; imag = imag + c.imag; } }; int main() { complex x(4,4); complex y(6,6); x + y; // Call Binary Member Function x.disp(); getch(); return 0; }
Output:
The value of real=10
The value of imag=10
Example for Unary Operator Overloading using Friend function.
#include <iostream> using namespace std; class complex { float real, imag; public: complex(float _real, float _imag) // constructor { real = _real; imag = _imag; } void disp() { cout<<"The value of real="<<real; cout<<"The value of imag="<<imag; } friend complex operator +(complex c, complex d) //Binary Friend function { d.real = d.real + c.real; d.imag = d.imag + c.imag; return d; } }; int main() { complex x(4,4); complex y(6,6); complex z = x + y; // Call Binary Friend Function z.disp(); }
Output:
The value of real=10
The value of imag=10
Question – 10. List out various type conversion techniques? Explain basic to class type conversion with example.
- C++ provides mechanism to perform automatic type conversion if all variable are of basic type.
- For user defined data type programmers have to convert it by using constructor or by using casting operator.
- Three type of situation arise in user defined data type conversion.
- Basic type to Class type
- Class type to Basic type
- Class type to Class type
- Now we will see each situation with example
- Basic type to Class type
- The basic type to class type conversion is done by using constructor.
Example:
#include <iostream> using namespace std; class sample { float a; public: sample(){} sample(int x) //Constructor to convert Basic to Class type { a=x; } void disp() { cout<<"The value of a="<<a; } }; int main() { int a=10; sample S; S=a; //Basic to class type conversion S.disp(); return 0; }
Output:
The value of a=10
Question – 11. Explain type conversion for class to basic type with example.
- The Class type to Basic type conversion is done by using Casing Operator.
- The casting operator function should satisfy the following conditions.
- It must be a class member.
- It must not specify a return type.
- It must not have any arguments.
Example:
#include <iostream> using namespace std; class sample { float a; public: sample() { a=10.23; } operator int(); }; sample:: operator int() //Casting operator function { int x; x=a; return x; } int main() { sample S; int y= S; // Class to Basic conversion cout<<"The value of y="<<y; getch(); return 0; }
Output:
The value of y=10
Question – 12. Explain type conversion for class type to another class type with example.
- The class to class conversion is done by both constructor and casting operator.
- If conversion take place at source class, then by casting operator.
operator destination_class_name() //Definition of Casting operator { //Create object of destination class //write statement to convert value // Return objecct of destination class }
- If conversion take place at destination class, then by constructor.
Constructor_of_Destination_Class(Source_Class Object_Name) { //Statement for conversion }
- We cannot convert at a time in both source and destination class.
Example:
#include <iostream> using namespace std; class invent2; // destination class declared class invent 1; // source class { int code; // item code int items; // no. of items float price; // cost of each item public: invent1( int a, int b , float c) { code = a; items = b; price = c; } void putdata() { cout <<”code:” << code << “\n”; cout <<”items:” << items << “\n”; cout <<”value:” << price << “\n”; } int getcode() {return code;} int getitems(){return items;} float getprice(){return price;} operator float(){return (items * price);} }; class invent2 // destination class int code; float value; public: invent2 () { code = 0; value =0; } invent2(float x, float y) { code=x; value =y; } void putdata () { cout <<”code:” << code << “\n”; cout <<”value:” << price << “\n”; } invent2(invent1 p) { code = p.getcode(); value= p.getitems()*p.getprice(); } }; int main() { invent s1(100,5,140.0); invent2 d1; float total_value; total_value =s1; d1=s1; cout<<”product details-invent1 type”<<”\n”; s1.putdata(); cout << ”\nstock value”<<”\n”; cout << “value =” <<total_value<<”\n\n”; cout <<”product details-invent2 type”<<”\n”; d1.putdata(); return 0; }
You may be interested in:
Programming In C MCQs
Programming In C++ MCQs
Programming In C Tutorials