UNIT-I: Introduction
Introducing Object-Oriented Approach, Relating to other paradigms {Functional, Data decomposition}. Basic terms
and ideas: Abstraction, Encapsulation, Inheritance, Polymorphism, Review of C, Difference between C and C++ - cin,
cout, new, delete, operators.
UNIT-II: Classes and Objects
Encapsulation, information hiding, abstract data types, Objects & classes, attributes, methods, C++ class
declaration, State identity and behaviour of an object, Constructors and destructors, instantiation of objects,
Default parameter value, object types, C++ garbage collection, dynamic memory allocation, Meta class / abstract
classes.
UNIT-III: Inheritance and Polymorphism
Inheritance, Class hierarchy, derivation – public, private & protected, Aggregation, composition vs classification
hierarchies, Polymorphism, Categorization of polymorphism techniques, Method polymorphism, Polymorphism by
parameter, Operator overloading, Parametric Polymorphism.
UNIT-IV: Generic Functions
Template function, function name overloading, overriding inheritance methods, Run time polymorphism, Multiple
Inheritance.
UNIT-V: Files and Exception Handling
Streams and files, Namespaces, Exception handling, Generic Classes.
UNIT-I: Introduction to Object Oriented Programming (OOP)
1. Object-Oriented Approach
Object-Oriented Programming (OOP) is a paradigm based on the concept of "objects", which contain data and methods.
OOP helps in designing reusable, maintainable, and scalable software.
2. Comparison with Other Paradigms
- Procedural Programming (like C): Focus is on functions and logic.
- Functional Programming: Focus is on pure functions and immutability (e.g., Lisp, Haskell).
- Data Decomposition: Focuses on breaking down data structures rather than functionality (used
in data-centric applications).
3. Basic OOP Concepts
- Abstraction: Hiding complex implementation and showing only essentials.
- Encapsulation: Wrapping data and functions together in a single unit (class).
- Inheritance: Ability to acquire properties of another class.
- Polymorphism: Ability to use a single interface with different underlying forms (function
overloading and overriding).
4. Review of C (Key Differences)
C is a procedural language, whereas C++ is object-oriented. C++ includes features like classes, objects, and
advanced memory management using new
and delete
.
5. Difference Between C and C++
- C uses
printf
/scanf
; C++ uses cin
/cout
.
- C++ supports OOP; C does not.
- C uses
malloc/free
; C++ uses new/delete
.
6. Example: Basic C++ Program using OOP Features
#include <iostream>
using namespace std;
class Student {
private:
string name;
int age;
public:
void setData(string n, int a) {
name = n;
age = a;
}
void display() {
cout << "Name: " << name << ", Age: " << age <<
endl;
}
};
int main() {
Student s1;
s1.setData("Amit", 20);
s1.display();
return 0;
}
7. Example: Use of new and delete
int* ptr = new int; // dynamically allocate memory
*ptr = 100;
cout << "Value: " << *ptr << endl;
delete ptr; // free memory
UNIT-II: Classes and Objects
1. Encapsulation & Information Hiding
Encapsulation is the concept of bundling data and methods that operate on that data within one
unit (class).
Information hiding is achieved by using access specifiers like private
,
public
, and protected
.
2. Abstract Data Types (ADT)
ADT refers to a data structure defined by the user that hides implementation details and exposes only operations.
3. Objects & Classes
- Class: A blueprint for objects containing attributes (data members) and methods (member
functions).
- Object: An instance of a class.
class Car {
public:
string brand;
int year;
void display() {
cout << brand << " - " << year << endl;
}
};
int main() {
Car c1;
c1.brand = "Toyota";
c1.year = 2022;
c1.display();
}
4. State, Identity, and Behaviour of an Object
- State: Represented by values of attributes.
- Identity: Unique name or memory location.
- Behaviour: Defined by methods/functions.
5. Constructors and Destructors
Constructor: Special method called when an object is created. It has the same name as the
class.
Destructor: Called when the object goes out of scope to clean up resources.
class Student {
public:
Student() {
cout << "Constructor called" << endl;
}
~Student() {
cout << "Destructor called" << endl;
}
};
int main() {
Student s;
}
6. Instantiation of Objects
Creating objects of a class using class name.
Car c1, c2; // Two objects created
7. Default Parameter Value
Allows passing fewer arguments by giving default values in function declaration.
void greet(string name = "Guest") {
cout << "Hello, " << name << endl;
}
greet(); // Output: Hello, Guest
greet("Nivesh"); // Output: Hello, Nivesh
8. Object Types
- Automatic (local)
- Dynamic (using new)
- Global/static
9. C++ Garbage Collection
C++ does not have automatic garbage collection like Java. The delete
operator is used to manually
deallocate dynamic memory.
int* ptr = new int(10);
cout << *ptr;
delete ptr;
10. Dynamic Memory Allocation
Using new
and delete
to allocate and free memory during runtime.
11. Meta Class / Abstract Class
An abstract class has at least one pure virtual function and cannot be instantiated directly.
class Shape {
public:
virtual void draw() = 0; // Pure virtual function
};
class Circle : public Shape {
public:
void draw() override {
cout << "Drawing Circle" << endl;
}
};
int main() {
Circle c;
c.draw();
}
UNIT-III: Inheritance and Polymorphism
1. Inheritance
Inheritance allows one class to inherit the properties and behaviors (members) of another class.
It promotes code reusability and forms a hierarchy of classes.
Example:
class Animal {
public:
void sound() {
cout << "Animal sound" << endl;
}
};
class Dog : public Animal {
public:
void bark() {
cout << "Bark" << endl;
}
};
int main() {
Dog d;
d.sound();
d.bark();
}
2. Class Hierarchy
A class hierarchy shows the relationship between a base class and its derived classes.
It can be single, multilevel, hierarchical, or hybrid inheritance.
3. Derivation – Public, Private & Protected
These determine how the members of the base class are inherited:
- Public: Public and protected members remain accessible in derived class.
- Private: All base members become private in derived class.
- Protected: Public and protected become protected.
4. Aggregation
Aggregation is a "has-a" relationship where one class contains another as a member.
Example:
class Engine {
public:
void start() { cout << "Engine starts" << endl; }
};
class Car {
Engine e;
public:
void startCar() {
e.start();
}
};
5. Composition vs Classification Hierarchies
Composition: One object is made of other objects.
Classification: An object is a specific type of a more general class.
6. Polymorphism
Polymorphism means "many forms". It allows functions or operators to act differently based on the input.
Types: Compile-time (method/ operator overloading), Run-time (virtual functions).
7. Categorization of Polymorphism Techniques
- Compile-time: Function Overloading, Operator Overloading
- Run-time: Function Overriding using Virtual Functions
8. Method Polymorphism (Function Overloading)
Function with same name but different parameters.
class Print {
public:
void show(int a) { cout << a << endl; }
void show(string s) { cout << s << endl; }
};
Print p;
p.show(5);
p.show("Hello");
9. Polymorphism by Parameter
Achieved when the same function name handles different types/number of parameters.
10. Operator Overloading
Operator overloading allows redefining the meaning of operators for user-defined types.
class Complex {
int real, imag;
public:
Complex(int r, int i) { real = r; imag = i; }
Complex operator + (Complex c) {
return Complex(real + c.real, imag + c.imag);
}
void display() { cout << real << "+" << imag << "i" <&endl;
}
};
int main() {
Complex c1(2, 3), c2(4, 5);
Complex c3 = c1 + c2;
c3.display();
}
11. Parametric Polymorphism
Using templates to write generic and reusable code.
template <class T>
T add(T a, T b) {
return a + b;
}
int main() {
cout << add<int>(5, 10) << endl;
cout << add<float>(2.5, 3.5);
}
UNIT-IV: Generic Function
1. Template Function
Template functions allow writing generic and reusable code. It enables the creation of functions that can operate
on different data types without rewriting code.
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
cout << add(10, 20) << endl; // For int
cout << add(2.5, 3.6) << endl; // For float
return 0;
}
2. Function Overloading
Overloading allows functions with the same name but different parameters.
void print(int i) {
cout << "Integer: " << i << endl;
}
void print(double d) {
cout << "Double: " << d << endl;
}
void print(string s) {
cout << "String: " << s << endl;
}
3. Method Overriding
Overriding is redefining a base class method in the derived class using the same signature.
class Base {
public:
virtual void show() {
cout << "Base class" << endl;
}
};
class Derived : public Base {
public:
void show() override {
cout << "Derived class" << endl;
}
};
4. Run-Time Polymorphism
Achieved using virtual functions and base class pointers.
Base* ptr;
Derived d;
ptr = &d;
ptr->show(); // Calls Derived's show() method
5. Multiple Inheritance
A class can inherit from more than one base class.
class A {
public:
void showA() { cout << "Class A" << endl; }
};
class B {
public:
void showB() { cout << "Class B" << endl; }
};
class C : public A, public B { };
int main() {
C obj;
obj.showA();
obj.showB();
return 0;
}
UNIT-V: Files and Exception Handling
1. Streams and Files
Streams in C++ are used to perform input and output operations. Files allow storing and retrieving data from
storage.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream outfile("example.txt");
if (outfile.is_open()) {
outfile << "Hello, file!" << endl;
outfile.close();
}
ifstream infile("example.txt");
string line;
while (getline(infile, line)) {
cout << line << endl;
}
infile.close();
return 0;
}
2. Namespaces
Namespaces in C++ are used to organize code into logical groups and prevent name collisions.
#include <iostream>
using namespace std;
namespace first_namespace {
void display() {
cout << "This is the first namespace!" << endl;
}
}
int main() {
first_namespace::display();
return 0;
}
3. Exception Handling
Exception handling in C++ is done using try, catch, and throw keywords. It is used to handle runtime errors.
#include <iostream>
using namespace std;
int divide(int a, int b) {
if (b == 0) {
throw "Division by zero!";
}
return a / b;
}
int main() {
try {
cout << "Result: " << divide(10, 0) << endl;
}
catch (const char* msg) {
cout << "Error: " << msg << endl;
}
return 0;
}
4. Generic Classes
Generic classes in C++ are used to create classes that can work with any data type.
template <typename T>
class Box {
T value;
public:
Box(T val) : value(val) {}
T getValue() { return value; }
};
int main() {
Box<int> intBox(5);
cout << "Integer Value: " << intBox.getValue() << endl;
Box<double> doubleBox(3.14);
cout << "Double Value: " << doubleBox.getValue() << endl;
return 0;
}