- Introduction to OOPs
- Benefits of using OOPs
- Object Oriented Languages vs Object Based Languages
- Real-world examples of OOPs
- Advantages and Disadvantages of OOPs
- Object
- Class
- Empty Classes
- Access Modifiers (or Access Specifiers)
- Getters and Setters
- Data Alignment
- Data Structure Padding
- Static Memory Allocation vs Dynamic Memory Allocation
- Constructors and Destructors
- Shallow Copy and Deep Copy
- Copy Assignment Operator(=)
- Encapsulation
- Inheritance
- Modes of Inheritance
- Types of Inheritance
- Inheritance Ambiguity
- Polymorphism
- Abstraction
- Encapsulation vs Abstraction
- Friend Function
- Virtual Function
- PureVirtual Function
- Abstract Classes
- Dynamic Binding
- this keyword
- const keyword
- static keyword
- virtual keyword
- new keyword
- final keyword
- explicit keyword
- super keyword
- abstract keyword
- Initializer List
- Diamond Problem / Deadly Diamond of Death
- Programming Paradigms
- Limitations of Inheritance
- Exceptional Handling in C++
- Garbage Collection in OOPs
- Method Overloading vs Method Overriding
- Singleton Classes
- Smart Pointers
- Friend Class
- Friend Function
- Inline Function
- Persistent Object vs Non-Persistent Object
- Virtual Inheritance
- Virtual Pointers(vptr) and Virtual Function Table(vtable)
- Factory Method
- Virtual Destructors
- Pointers and References
- Templates in C++
- Generics in Java
- volatile keyword in C
- final vs finally vs finalize in Java
- Private Constructor
- Reflection of Java Classes