{"id":445,"date":"2026-06-21T13:17:40","date_gmt":"2026-06-21T13:17:40","guid":{"rendered":"https:\/\/paknoteshub.online\/?page_id=445"},"modified":"2026-06-21T13:18:35","modified_gmt":"2026-06-21T13:18:35","slug":"oop","status":"publish","type":"page","link":"https:\/\/paknoteshub.online\/?page_id=445","title":{"rendered":"OOP"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"445\" class=\"elementor elementor-445\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1f233ba e-flex e-con-boxed e-con e-parent\" data-id=\"1f233ba\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7885023 elementor-widget elementor-widget-html\" data-id=\"7885023\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n  <meta charset=\"UTF-8\"\/>\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\/>\r\n  <title>Object-Oriented Programming in C++ \u2013 University Level \u2013 Pak Notes Hub<\/title>\r\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&family=Fira+Code:wght@400;500&display=swap\" rel=\"stylesheet\"\/>\r\n  <style>\r\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\n    :root {\r\n      --green:#1a7a4a; --green-dark:#145f38; --green-light:#e8f5ee;\r\n      --teal:#17a589; --accent:#f0b127; --dark:#1c2833; --mid:#566573;\r\n      --light:#f4f6f7; --code-bg:#f0f4f8; --code-border:#2e86c1;\r\n      --note-bg:#fef9e7; --note-border:#f0b127; --white:#ffffff;\r\n      --radius:10px; --shadow:0 4px 24px rgba(26,122,74,.10);\r\n    }\r\n    html { scroll-behavior:smooth; }\r\n    body { font-family:'Inter',sans-serif; background:#f2f6f3; color:var(--dark); line-height:1.7; font-size:15px; }\r\n\r\n    \/* NAV *\/\r\n    nav { position:sticky; top:0; z-index:100; background:var(--green-dark); padding:0 2rem; display:flex; align-items:center; justify-content:space-between; height:56px; box-shadow:0 2px 12px rgba(0,0,0,.25); }\r\n    .nav-brand { color:#fff; font-weight:700; font-size:1.05rem; }\r\n    .nav-brand span { color:#a9dfbf; }\r\n    .nav-links { display:flex; gap:1.2rem; }\r\n    .nav-links a { color:#d5f5e3; font-size:.85rem; font-weight:500; text-decoration:none; transition:color .2s; }\r\n    .nav-links a:hover { color:#fff; }\r\n\r\n    \/* HERO *\/\r\n    .hero { background:linear-gradient(135deg,var(--green) 0%,#145f38 60%,#0d4527 100%); padding:5rem 2rem 4rem; text-align:center; position:relative; overflow:hidden; }\r\n    .hero::before { content:'C++'; position:absolute; right:6%; top:50%; transform:translateY(-50%); font-size:9rem; font-family:'Fira Code',monospace; color:rgba(255,255,255,.06); font-weight:700; pointer-events:none; }\r\n    .hero-tag { display:inline-block; background:rgba(255,255,255,.12); color:#a9dfbf; font-size:.78rem; font-weight:600; letter-spacing:1.5px; text-transform:uppercase; padding:.35rem 1rem; border-radius:100px; margin-bottom:1.2rem; border:1px solid rgba(169,223,163,.3); }\r\n    .hero h1 { color:#fff; font-size:clamp(1.8rem,5vw,3rem); font-weight:700; line-height:1.15; margin-bottom:.8rem; }\r\n    .hero h1 span { color:#a9dfbf; }\r\n    .hero p { color:#d5f5e3; font-size:1.05rem; max-width:580px; margin:0 auto 2rem; }\r\n    .hero-pills { display:flex; flex-wrap:wrap; justify-content:center; gap:.7rem; }\r\n    .pill { background:rgba(255,255,255,.13); color:#e8f5ee; padding:.45rem 1.1rem; border-radius:100px; font-size:.82rem; font-weight:500; border:1px solid rgba(255,255,255,.18); }\r\n\r\n    \/* LAYOUT *\/\r\n    .page-wrap { max-width:940px; margin:0 auto; padding:2.5rem 1.5rem 4rem; display:grid; grid-template-columns:235px 1fr; gap:2.5rem; align-items:start; }\r\n\r\n    \/* SIDEBAR *\/\r\n    .sidebar { position:sticky; top:72px; background:var(--white); border-radius:var(--radius); box-shadow:var(--shadow); overflow:hidden; }\r\n    .sidebar-title { background:var(--green); color:#fff; font-size:.75rem; font-weight:700; letter-spacing:1.2px; text-transform:uppercase; padding:.85rem 1.1rem; }\r\n    .toc-list { list-style:none; padding:.5rem 0; max-height:calc(100vh - 130px); overflow-y:auto; }\r\n    .toc-list li a { display:flex; align-items:center; gap:.55rem; padding:.4rem 1.1rem; color:var(--mid); font-size:.81rem; font-weight:500; text-decoration:none; transition:all .18s; border-left:3px solid transparent; }\r\n    .toc-list li a:hover,.toc-list li a.active { color:var(--green); background:var(--green-light); border-left-color:var(--green); }\r\n    .toc-num { display:inline-flex; align-items:center; justify-content:center; min-width:20px; height:20px; border-radius:4px; background:var(--green-light); color:var(--green); font-size:.7rem; font-weight:700; flex-shrink:0; }\r\n    .toc-list li a.active .toc-num { background:var(--green); color:#fff; }\r\n\r\n    \/* UNIT CARD *\/\r\n    .unit { background:var(--white); border-radius:var(--radius); box-shadow:var(--shadow); margin-bottom:2.5rem; overflow:hidden; scroll-margin-top:72px; }\r\n    .unit-header { background:linear-gradient(100deg,var(--green) 0%,#1d9560 100%); padding:1.4rem 1.8rem; }\r\n    .unit-num-badge { background:rgba(255,255,255,.18); color:#a9dfbf; font-size:.72rem; font-weight:700; letter-spacing:1px; text-transform:uppercase; padding:.3rem .75rem; border-radius:100px; }\r\n    .unit-header h2 { color:#fff; font-size:1.25rem; font-weight:700; line-height:1.25; margin-top:.35rem; }\r\n    .unit-header p { color:#c8f0d8; font-size:.85rem; margin-top:.2rem; }\r\n    .unit-body { padding:1.8rem; }\r\n\r\n    \/* HEADINGS & TEXT *\/\r\n    .unit-body h3 { font-size:1rem; font-weight:700; color:var(--green); margin:1.6rem 0 .7rem; padding-left:.85rem; border-left:3px solid var(--green); line-height:1.3; }\r\n    .unit-body h3:first-child { margin-top:0; }\r\n    .unit-body p { color:var(--dark); margin-bottom:.7rem; }\r\n    .unit-body ul { list-style:none; padding:0; margin:.5rem 0 1rem; }\r\n    .unit-body ul li { padding:.3rem 0 .3rem 1.5rem; position:relative; color:var(--dark); font-size:.93rem; }\r\n    .unit-body ul li::before { content:'\u27a4'; position:absolute; left:0; color:var(--teal); font-size:.75rem; top:.45rem; }\r\n    .unit-body code, .icode { font-family:'Fira Code',monospace; background:#eef2f5; color:#1a5276; padding:.1rem .4rem; border-radius:4px; font-size:.85em; }\r\n\r\n    \/* CODE BLOCK *\/\r\n    .code-block { background:var(--code-bg); border-left:4px solid var(--code-border); border-radius:6px; padding:1.1rem 1.3rem; margin:.9rem 0 1rem; overflow-x:auto; }\r\n    .code-block pre { font-family:'Fira Code',monospace; font-size:.83rem; color:#1a3a54; line-height:1.75; white-space:pre; }\r\n    .cm { color:#7f8c8d; } .kw { color:#1a5276; font-weight:600; } .st { color:#1e8449; }\r\n\r\n    \/* TABLES *\/\r\n    .data-table { width:100%; border-collapse:collapse; margin:.9rem 0 1.2rem; font-size:.87rem; border-radius:8px; overflow:hidden; box-shadow:0 1px 6px rgba(0,0,0,.06); }\r\n    .data-table thead th { background:var(--green); color:#fff; padding:.7rem 1rem; text-align:left; font-weight:600; font-size:.82rem; }\r\n    .data-table tbody tr:nth-child(even) { background:var(--green-light); }\r\n    .data-table tbody tr:hover { background:#d4efdf; }\r\n    .data-table td { padding:.6rem 1rem; border-bottom:1px solid #dce8e0; vertical-align:top; }\r\n    .data-table td:first-child { font-weight:600; color:var(--green-dark); }\r\n\r\n    \/* BOXES *\/\r\n    .info-box { background:var(--note-bg); border:1px solid var(--note-border); border-radius:7px; padding:.85rem 1.1rem; margin:.9rem 0; font-size:.88rem; line-height:1.6; color:#7d6608; display:flex; align-items:flex-start; gap:.7rem; }\r\n    .practice { background:var(--green-light); border:1.5px dashed var(--green); border-radius:8px; padding:.85rem 1.1rem; margin-top:1.4rem; color:var(--green-dark); font-size:.88rem; font-weight:500; }\r\n\r\n    \/* FEATURE GRID *\/\r\n    .feature-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:.6rem; margin:.9rem 0 1.2rem; }\r\n    .feature-item { background:var(--green-light); border-radius:7px; padding:.6rem .9rem; font-size:.85rem; display:flex; align-items:center; gap:.5rem; color:var(--green-dark); border:1px solid #a2d9b5; font-weight:500; }\r\n\r\n    \/* CONCEPT GRID (cards) *\/\r\n    .concept-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(190px,1fr)); gap:.8rem; margin:.9rem 0 1.2rem; }\r\n    .concept-card { background:var(--green-light); border:1px solid #a2d9b5; border-radius:8px; padding:.85rem 1rem; }\r\n    .concept-card .concept-name { font-weight:700; color:var(--green); font-size:.92rem; margin-bottom:.3rem; }\r\n    .concept-card .concept-rule { font-size:.8rem; color:var(--mid); }\r\n\r\n    \/* TOC CARD *\/\r\n    #toc-section { background:var(--white); border-radius:var(--radius); box-shadow:var(--shadow); margin-bottom:2.5rem; overflow:hidden; }\r\n    .toc-card-header { background:linear-gradient(100deg,var(--green) 0%,#1d9560 100%); padding:1.2rem 1.8rem; }\r\n    .toc-card-header h2 { color:#fff; font-size:1.2rem; font-weight:700; }\r\n    .toc-card-body { padding:1.4rem 1.8rem; }\r\n    .toc-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(250px,1fr)); gap:.6rem; }\r\n    .toc-item { background:var(--light); border-radius:7px; padding:.65rem 1rem; display:flex; align-items:center; gap:.75rem; text-decoration:none; color:var(--dark); font-size:.86rem; font-weight:500; border:1px solid #d5e5db; transition:all .18s; }\r\n    .toc-item:hover { background:var(--green-light); border-color:var(--green); color:var(--green); transform:translateY(-1px); }\r\n    .toc-badge { background:var(--green); color:#fff; font-size:.7rem; font-weight:700; min-width:22px; height:22px; border-radius:5px; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; }\r\n\r\n    \/* CONGRATS *\/\r\n    .congrats { background:linear-gradient(135deg,var(--green) 0%,#145f38 100%); border-radius:var(--radius); padding:2.5rem 2rem; text-align:center; color:#fff; margin-bottom:2.5rem; box-shadow:var(--shadow); }\r\n    .congrats h2 { font-size:1.8rem; margin-bottom:.5rem; }\r\n    .congrats p { color:#d5f5e3; font-size:1rem; }\r\n\r\n    \/* PROGRESS + BACK TOP *\/\r\n    .progress-bar { position:fixed; top:0; left:0; height:3px; background:var(--accent); z-index:200; transition:width .1s linear; width:0%; }\r\n    #back-top { position:fixed; bottom:2rem; right:2rem; background:var(--green); color:#fff; width:42px; height:42px; border-radius:50%; border:none; cursor:pointer; font-size:1.1rem; box-shadow:0 4px 14px rgba(26,122,74,.35); display:flex; align-items:center; justify-content:center; opacity:0; transition:opacity .25s,transform .25s; pointer-events:none; }\r\n    #back-top.visible { opacity:1; pointer-events:auto; }\r\n    #back-top:hover { transform:translateY(-2px); }\r\n\r\n    @media(max-width:720px){ .page-wrap{grid-template-columns:1fr;} .sidebar{position:static;display:none;} .hero::before{display:none;} nav .nav-links{display:none;} }\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div class=\"progress-bar\" id=\"progress\"><\/div>\r\n\r\n<nav>\r\n  <div class=\"nav-brand\">Pak <span>Notes Hub<\/span><\/div>\r\n  <div class=\"nav-links\">\r\n    <a href=\"#toc-section\">Course Outline<\/a>\r\n    <a href=\"#unit-1\">Start Learning<\/a>\r\n    <a href=\"#unit-6\">Inheritance<\/a>\r\n    <a href=\"#unit-8\">Polymorphism<\/a>\r\n  <\/div>\r\n<\/nav>\r\n\r\n<section class=\"hero\">\r\n  <div class=\"hero-tag\">\ud83d\udcda University Level \u2014 BS CS \/ BS IT<\/div>\r\n  <h1>Object-Oriented Programming<br\/><span>in C++ Complete Notes<\/span><\/h1>\r\n  <p>Classes \u00b7 Objects \u00b7 Inheritance \u00b7 Polymorphism \u00b7 Templates \u2014 All in Easy English<\/p>\r\n  <div class=\"hero-pills\">\r\n    <span class=\"pill\">\ud83c\udfaf 15 Units<\/span>\r\n    <span class=\"pill\">\ud83c\udf93 University Level<\/span>\r\n    <span class=\"pill\">\ud83d\udcbb Code Examples<\/span>\r\n    <span class=\"pill\">\ud83d\udcdd Practice Tasks<\/span>\r\n    <span class=\"pill\">\ud83d\ude80 Final Project<\/span>\r\n  <\/div>\r\n<\/section>\r\n\r\n<div class=\"page-wrap\">\r\n\r\n  <!-- SIDEBAR -->\r\n  <aside class=\"sidebar\">\r\n    <div class=\"sidebar-title\">\ud83d\udccb Course Contents<\/div>\r\n    <ul class=\"toc-list\" id=\"toc-nav\">\r\n      <li><a href=\"#toc-section\"><span class=\"toc-num\">\ud83d\udccb<\/span> Contents<\/a><\/li>\r\n      <li><a href=\"#unit-1\"><span class=\"toc-num\">1<\/span> Intro to OOP<\/a><\/li>\r\n      <li><a href=\"#unit-2\"><span class=\"toc-num\">2<\/span> Classes &amp; Objects<\/a><\/li>\r\n      <li><a href=\"#unit-3\"><span class=\"toc-num\">3<\/span> Access Specifiers<\/a><\/li>\r\n      <li><a href=\"#unit-4\"><span class=\"toc-num\">4<\/span> Constructors &amp; Destructors<\/a><\/li>\r\n      <li><a href=\"#unit-5\"><span class=\"toc-num\">5<\/span> Encapsulation<\/a><\/li>\r\n      <li><a href=\"#unit-6\"><span class=\"toc-num\">6<\/span> Inheritance<\/a><\/li>\r\n      <li><a href=\"#unit-7\"><span class=\"toc-num\">7<\/span> Types of Inheritance<\/a><\/li>\r\n      <li><a href=\"#unit-8\"><span class=\"toc-num\">8<\/span> Polymorphism<\/a><\/li>\r\n      <li><a href=\"#unit-9\"><span class=\"toc-num\">9<\/span> Function Overloading<\/a><\/li>\r\n      <li><a href=\"#unit-10\"><span class=\"toc-num\">10<\/span> Operator Overloading<\/a><\/li>\r\n      <li><a href=\"#unit-11\"><span class=\"toc-num\">11<\/span> Virtual Functions<\/a><\/li>\r\n      <li><a href=\"#unit-12\"><span class=\"toc-num\">12<\/span> Friend Functions<\/a><\/li>\r\n      <li><a href=\"#unit-13\"><span class=\"toc-num\">13<\/span> Templates<\/a><\/li>\r\n      <li><a href=\"#unit-14\"><span class=\"toc-num\">14<\/span> File Handling &amp; Exception<\/a><\/li>\r\n      <li><a href=\"#unit-15\"><span class=\"toc-num\">15<\/span> Final Project<\/a><\/li>\r\n    <\/ul>\r\n  <\/aside>\r\n\r\n  <main>\r\n\r\n    <!-- TOC CARD -->\r\n    <div id=\"toc-section\">\r\n      <div class=\"toc-card-header\"><h2>\ud83d\udccb Table of Contents \u2014 15 Units<\/h2><\/div>\r\n      <div class=\"toc-card-body\">\r\n        <div class=\"toc-grid\">\r\n          <a class=\"toc-item\" href=\"#unit-1\"><span class=\"toc-badge\">1<\/span> Introduction to OOP<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-2\"><span class=\"toc-badge\">2<\/span> Classes &amp; Objects<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-3\"><span class=\"toc-badge\">3<\/span> Access Specifiers<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-4\"><span class=\"toc-badge\">4<\/span> Constructors &amp; Destructors<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-5\"><span class=\"toc-badge\">5<\/span> Encapsulation<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-6\"><span class=\"toc-badge\">6<\/span> Inheritance<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-7\"><span class=\"toc-badge\">7<\/span> Types of Inheritance<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-8\"><span class=\"toc-badge\">8<\/span> Polymorphism<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-9\"><span class=\"toc-badge\">9<\/span> Function Overloading<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-10\"><span class=\"toc-badge\">10<\/span> Operator Overloading<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-11\"><span class=\"toc-badge\">11<\/span> Virtual Functions &amp; Abstract Classes<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-12\"><span class=\"toc-badge\">12<\/span> Friend Functions &amp; Classes<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-13\"><span class=\"toc-badge\">13<\/span> Templates<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-14\"><span class=\"toc-badge\">14<\/span> File Handling &amp; Exceptions<\/a>\r\n          <a class=\"toc-item\" href=\"#unit-15\"><span class=\"toc-badge\">15<\/span> Final Project<\/a>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 1 -->\r\n    <div class=\"unit\" id=\"unit-1\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 1<\/span>\r\n        <h2>Introduction to Object-Oriented Programming<\/h2>\r\n        <p>What is OOP and why is it important?<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is OOP?<\/h3>\r\n        <p><strong>Object-Oriented Programming (OOP)<\/strong> is a programming paradigm (style) based on the concept of <strong>\"objects\"<\/strong>. An object contains both <strong>data (attributes)<\/strong> and <strong>functions (methods)<\/strong> that operate on that data. OOP allows us to model real-world entities in our code.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Think of an object like a real-world thing: a car has properties (color, model, speed) and behaviors (start, stop, accelerate). OOP lets us represent this in code!<\/div>\r\n\r\n        <h3>Procedural vs Object-Oriented Programming<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Feature<\/th><th>Procedural (C)<\/th><th>Object-Oriented (C++)<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Focus<\/td><td>Functions and procedures<\/td><td>Objects and classes<\/td><\/tr>\r\n            <tr><td>Data &amp; Functions<\/td><td>Separate<\/td><td>Bundled together in objects<\/td><\/tr>\r\n            <tr><td>Data Security<\/td><td>Data can be accessed anywhere<\/td><td>Data can be hidden (encapsulation)<\/td><\/tr>\r\n            <tr><td>Code Reusability<\/td><td>Limited<\/td><td>High (through inheritance)<\/td><\/tr>\r\n            <tr><td>Real-World Modeling<\/td><td>Difficult<\/td><td>Natural and easy<\/td><\/tr>\r\n            <tr><td>Examples<\/td><td>C, Pascal, FORTRAN<\/td><td>C++, Java, Python<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Four Pillars of OOP<\/h3>\r\n        <div class=\"concept-grid\">\r\n          <div class=\"concept-card\">\r\n            <div class=\"concept-name\">1. Encapsulation<\/div>\r\n            <div class=\"concept-rule\">Bundling data and methods together, hiding internal details<\/div>\r\n          <\/div>\r\n          <div class=\"concept-card\">\r\n            <div class=\"concept-name\">2. Inheritance<\/div>\r\n            <div class=\"concept-rule\">Creating new classes from existing ones, reusing code<\/div>\r\n          <\/div>\r\n          <div class=\"concept-card\">\r\n            <div class=\"concept-name\">3. Polymorphism<\/div>\r\n            <div class=\"concept-rule\">Same function name, different behaviors in different contexts<\/div>\r\n          <\/div>\r\n          <div class=\"concept-card\">\r\n            <div class=\"concept-name\">4. Abstraction<\/div>\r\n            <div class=\"concept-rule\">Showing only essential features, hiding complex implementation<\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <h3>Benefits of OOP<\/h3>\r\n        <ul>\r\n          <li><strong>Modularity<\/strong> \u2014 Code is organized into separate, manageable pieces<\/li>\r\n          <li><strong>Reusability<\/strong> \u2014 Existing classes can be reused through inheritance<\/li>\r\n          <li><strong>Maintainability<\/strong> \u2014 Easier to update and fix code<\/li>\r\n          <li><strong>Security<\/strong> \u2014 Data hiding protects sensitive information<\/li>\r\n          <li><strong>Flexibility<\/strong> \u2014 Polymorphism allows flexibility in code design<\/li>\r\n          <li><strong>Real-World Modeling<\/strong> \u2014 Represents real-world scenarios naturally<\/li>\r\n        <\/ul>\r\n\r\n        <h3>Basic OOP Terminology<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Term<\/th><th>Meaning<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Class<\/td><td>Blueprint or template for creating objects<\/td><\/tr>\r\n            <tr><td>Object<\/td><td>Instance of a class (actual entity)<\/td><\/tr>\r\n            <tr><td>Attribute\/Data Member<\/td><td>Variables inside a class (properties)<\/td><\/tr>\r\n            <tr><td>Method\/Member Function<\/td><td>Functions inside a class (behaviors)<\/td><\/tr>\r\n            <tr><td>Instance<\/td><td>A specific object created from a class<\/td><\/tr>\r\n            <tr><td>Message Passing<\/td><td>Objects communicate by calling each other's methods<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Why C++ for OOP?<\/h3>\r\n        <p>C++ was designed by <strong>Bjarne Stroustrup<\/strong> in 1979 as an extension of C with object-oriented features. It supports both procedural and OOP paradigms, making it a versatile language.<\/p>\r\n        <div class=\"feature-grid\">\r\n          <div class=\"feature-item\">\u2705 Supports Multiple Paradigms<\/div>\r\n          <div class=\"feature-item\">\u26a1 High Performance<\/div>\r\n          <div class=\"feature-item\">\ud83d\udd27 Low-Level Memory Control<\/div>\r\n          <div class=\"feature-item\">\ud83d\udcda Rich Standard Library (STL)<\/div>\r\n          <div class=\"feature-item\">\ud83c\udfaf Used in System Software<\/div>\r\n          <div class=\"feature-item\">\ud83c\udfae Popular in Game Development<\/div>\r\n        <\/div>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Write the difference between procedural and object-oriented programming with at least 3 points. Name 3 real-world objects and list their attributes and behaviors.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 2 -->\r\n    <div class=\"unit\" id=\"unit-2\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 2<\/span>\r\n        <h2>Classes and Objects in C++<\/h2>\r\n        <p>Creating blueprints and instances \u2014 the foundation of OOP.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is a Class?<\/h3>\r\n        <p>A <strong>class<\/strong> is a user-defined data type that serves as a blueprint for creating objects. It defines what attributes (data) and methods (functions) an object will have.<\/p>\r\n        <p>Think of a class like an architectural blueprint \u2014 it defines the structure, but the actual house built from it is the object.<\/p>\r\n\r\n        <h3>What is an Object?<\/h3>\r\n        <p>An <strong>object<\/strong> is an instance of a class \u2014 the actual entity created in memory based on the class definition. One class can have multiple objects, each with its own set of attribute values.<\/p>\r\n\r\n        <h3>Defining a Class in C++<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Syntax of a class<\/span>\r\n<span class=\"kw\">class<\/span> ClassName {\r\n    <span class=\"cm\">\/\/ Access specifier<\/span>\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Data members (attributes)<\/span>\r\n    <span class=\"kw\">int<\/span> attribute1;\r\n    string attribute2;\r\n\r\n    <span class=\"cm\">\/\/ Member functions (methods)<\/span>\r\n    <span class=\"kw\">void<\/span> method1() {\r\n        cout &lt;&lt; <span class=\"st\">\"Hello from method1\"<\/span> &lt;&lt; endl;\r\n    }\r\n};<\/pre><\/div>\r\n\r\n        <h3>Creating Objects<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Example: Student class<\/span>\r\n<span class=\"kw\">#include<\/span> &lt;iostream&gt;\r\n<span class=\"kw\">using namespace<\/span> std;\r\n\r\n<span class=\"kw\">class<\/span> Student {\r\n<span class=\"kw\">public<\/span>:\r\n    string name;\r\n    <span class=\"kw\">int<\/span> rollNo;\r\n    <span class=\"kw\">float<\/span> gpa;\r\n\r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"Name: \"<\/span> &lt;&lt; name &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Roll No: \"<\/span> &lt;&lt; rollNo &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"GPA: \"<\/span> &lt;&lt; gpa &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    <span class=\"cm\">\/\/ Creating objects<\/span>\r\n    Student s1, s2;\r\n    \r\n    <span class=\"cm\">\/\/ Accessing members using dot operator<\/span>\r\n    s1.name = <span class=\"st\">\"Ali\"<\/span>;\r\n    s1.rollNo = 101;\r\n    s1.gpa = 3.8;\r\n    \r\n    s1.display();\r\n    <span class=\"cm\">\/\/ Output:\r\n    \/\/ Name: Ali\r\n    \/\/ Roll No: 101\r\n    \/\/ GPA: 3.8<\/span>\r\n    \r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Class vs Object<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Class<\/th><th>Object<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Blueprint or template<\/td><td>Instance of a class<\/td><\/tr>\r\n            <tr><td>Logical entity<\/td><td>Physical entity<\/td><\/tr>\r\n            <tr><td>Declared once<\/td><td>Can be created multiple times<\/td><\/tr>\r\n            <tr><td>No memory allocated<\/td><td>Memory is allocated<\/td><\/tr>\r\n            <tr><td>Example: Student class<\/td><td>Example: s1, s2 objects<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Member Functions \u2014 Inside vs Outside Class<\/h3>\r\n        <p>Member functions can be defined <strong>inside<\/strong> the class or <strong>outside<\/strong> using the scope resolution operator <code>::<\/code><\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Rectangle {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">int<\/span> length, width;\r\n    \r\n    <span class=\"cm\">\/\/ Defined inside class<\/span>\r\n    <span class=\"kw\">int<\/span> area() {\r\n        <span class=\"kw\">return<\/span> length * width;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Declaration only (definition outside)<\/span>\r\n    <span class=\"kw\">int<\/span> perimeter();\r\n};\r\n\r\n<span class=\"cm\">\/\/ Definition outside class using ::<\/span>\r\n<span class=\"kw\">int<\/span> Rectangle::perimeter() {\r\n    <span class=\"kw\">return<\/span> 2 * (length + width);\r\n}<\/pre><\/div>\r\n\r\n        <h3>Accessing Class Members<\/h3>\r\n        <p>We use the <strong>dot operator (.)<\/strong> to access members of an object and the <strong>arrow operator (-&gt;)<\/strong> for pointers to objects.<\/p>\r\n        <div class=\"code-block\"><pre>Student s1;\r\ns1.name = <span class=\"st\">\"Ahmed\"<\/span>;     <span class=\"cm\">\/\/ dot operator for objects<\/span>\r\n\r\nStudent *ptr = &amp;s1;\r\nptr-&gt;rollNo = 102;     <span class=\"cm\">\/\/ arrow operator for pointers<\/span><\/pre><\/div>\r\n\r\n        <h3>Array of Objects<\/h3>\r\n        <div class=\"code-block\"><pre>Student students[3];  <span class=\"cm\">\/\/ Array of 3 Student objects<\/span>\r\n\r\nstudents[0].name = <span class=\"st\">\"Sara\"<\/span>;\r\nstudents[0].rollNo = 201;\r\n\r\nstudents[1].name = <span class=\"st\">\"Hassan\"<\/span>;\r\nstudents[1].rollNo = 202;\r\n\r\n<span class=\"kw\">for<\/span>(<span class=\"kw\">int<\/span> i=0; i&lt;3; i++) {\r\n    students[i].display();\r\n}<\/pre><\/div>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a class <code>Car<\/code> with attributes: brand, model, year, and a method <code>displayInfo()<\/code>. Create 2 objects and display their information.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 3 -->\r\n    <div class=\"unit\" id=\"unit-3\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 3<\/span>\r\n        <h2>Access Specifiers (Access Modifiers)<\/h2>\r\n        <p>Controlling visibility \u2014 public, private, and protected.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What are Access Specifiers?<\/h3>\r\n        <p><strong>Access specifiers<\/strong> (also called access modifiers) control who can access the members of a class. They enforce <strong>data hiding<\/strong> and <strong>encapsulation<\/strong>, which are key OOP principles.<\/p>\r\n\r\n        <h3>Three Types of Access Specifiers<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Specifier<\/th><th>Accessible From<\/th><th>Use Case<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>public<\/td><td>Anywhere (inside class, outside class, derived classes)<\/td><td>Interface of the class \u2014 methods users can call<\/td><\/tr>\r\n            <tr><td>private<\/td><td>Only inside the class (not in derived classes)<\/td><td>Internal implementation \u2014 data that should be hidden<\/td><\/tr>\r\n            <tr><td>protected<\/td><td>Inside class + derived classes<\/td><td>Data that child classes need to access<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Public Access Specifier<\/h3>\r\n        <p>Members declared as <code>public<\/code> can be accessed from anywhere in the program.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Box {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">int<\/span> length;  <span class=\"cm\">\/\/ public data member<\/span>\r\n    \r\n    <span class=\"kw\">void<\/span> display() {  <span class=\"cm\">\/\/ public member function<\/span>\r\n        cout &lt;&lt; <span class=\"st\">\"Length: \"<\/span> &lt;&lt; length;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Box b;\r\n    b.length = 10;   <span class=\"cm\">\/\/ \u2713 Accessible \u2014 it's public<\/span>\r\n    b.display();     <span class=\"cm\">\/\/ \u2713 Accessible<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Private Access Specifier<\/h3>\r\n        <p>Members declared as <code>private<\/code> can only be accessed from within the class. This is the default access level in C++ classes.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> BankAccount {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">double<\/span> balance;  <span class=\"cm\">\/\/ private \u2014 hidden from outside<\/span>\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> deposit(<span class=\"kw\">double<\/span> amount) {\r\n        balance += amount;  <span class=\"cm\">\/\/ \u2713 Can access private member inside class<\/span>\r\n    }\r\n    \r\n    <span class=\"kw\">double<\/span> getBalance() {\r\n        <span class=\"kw\">return<\/span> balance;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    BankAccount acc;\r\n    <span class=\"cm\">\/\/ acc.balance = 5000;  \u2717 ERROR \u2014 balance is private<\/span>\r\n    acc.deposit(5000);     <span class=\"cm\">\/\/ \u2713 Access through public method<\/span>\r\n    cout &lt;&lt; acc.getBalance();  <span class=\"cm\">\/\/ \u2713 Get value using public method<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Protected Access Specifier<\/h3>\r\n        <p>Members declared as <code>protected<\/code> are like private members, but they can also be accessed by derived (child) classes.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Parent {\r\n<span class=\"kw\">protected<\/span>:\r\n    <span class=\"kw\">int<\/span> protectedData;  <span class=\"cm\">\/\/ protected member<\/span>\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Child : <span class=\"kw\">public<\/span> Parent {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> display() {\r\n        protectedData = 100;  <span class=\"cm\">\/\/ \u2713 Can access protected member of parent<\/span>\r\n        cout &lt;&lt; protectedData;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Child c;\r\n    <span class=\"cm\">\/\/ c.protectedData = 50;  \u2717 ERROR \u2014 not accessible outside classes<\/span>\r\n    c.display();  <span class=\"cm\">\/\/ \u2713 Works through public method<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Access Specifiers Summary Table<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Access From<\/th><th>public<\/th><th>private<\/th><th>protected<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Same Class<\/td><td>\u2713 Yes<\/td><td>\u2713 Yes<\/td><td>\u2713 Yes<\/td><\/tr>\r\n            <tr><td>Derived Class<\/td><td>\u2713 Yes<\/td><td>\u2717 No<\/td><td>\u2713 Yes<\/td><\/tr>\r\n            <tr><td>Outside Class<\/td><td>\u2713 Yes<\/td><td>\u2717 No<\/td><td>\u2717 No<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Default Access Specifier<\/h3>\r\n        <p>If you don't specify an access modifier, the default is <strong>private<\/strong> for classes and <strong>public<\/strong> for structs.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Best Practice: Always explicitly write access specifiers to make your code clear and avoid confusion. Keep data members private and provide public methods to access them (getters and setters).<\/div>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a class <code>Employee<\/code> with private attributes (id, salary), protected attribute (department), and public methods to set and get these values. Test it in main().<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 4 -->\r\n    <div class=\"unit\" id=\"unit-4\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 4<\/span>\r\n        <h2>Constructors and Destructors<\/h2>\r\n        <p>Special functions \u2014 automatic initialization and cleanup.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is a Constructor?<\/h3>\r\n        <p>A <strong>constructor<\/strong> is a special member function that is automatically called when an object is created. It has the <strong>same name as the class<\/strong> and <strong>no return type<\/strong> (not even void). Constructors are used to initialize object attributes.<\/p>\r\n\r\n        <h3>Types of Constructors<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Type<\/th><th>Description<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Default Constructor<\/td><td>No parameters \u2014 initializes with default values<\/td><\/tr>\r\n            <tr><td>Parameterized Constructor<\/td><td>Takes parameters to initialize with specific values<\/td><\/tr>\r\n            <tr><td>Copy Constructor<\/td><td>Creates a new object as a copy of an existing object<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Default Constructor<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Student {\r\n<span class=\"kw\">private<\/span>:\r\n    string name;\r\n    <span class=\"kw\">int<\/span> age;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Default constructor<\/span>\r\n    Student() {\r\n        name = <span class=\"st\">\"Unknown\"<\/span>;\r\n        age = 0;\r\n        cout &lt;&lt; <span class=\"st\">\"Default constructor called\\n\"<\/span>;\r\n    }\r\n    \r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"Name: \"<\/span> &lt;&lt; name &lt;&lt; <span class=\"st\">\", Age: \"<\/span> &lt;&lt; age &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Student s1;  <span class=\"cm\">\/\/ Constructor automatically called<\/span>\r\n    s1.display();\r\n    <span class=\"cm\">\/\/ Output:\r\n    \/\/ Default constructor called\r\n    \/\/ Name: Unknown, Age: 0<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Parameterized Constructor<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Rectangle {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> length, width;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Parameterized constructor<\/span>\r\n    Rectangle(<span class=\"kw\">int<\/span> l, <span class=\"kw\">int<\/span> w) {\r\n        length = l;\r\n        width = w;\r\n    }\r\n    \r\n    <span class=\"kw\">int<\/span> area() {\r\n        <span class=\"kw\">return<\/span> length * width;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Rectangle r1(10, 5);   <span class=\"cm\">\/\/ Values passed to constructor<\/span>\r\n    cout &lt;&lt; <span class=\"st\">\"Area: \"<\/span> &lt;&lt; r1.area();  <span class=\"cm\">\/\/ Output: Area: 50<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Constructor Overloading<\/h3>\r\n        <p>A class can have multiple constructors with different parameters. This is called <strong>constructor overloading<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Box {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> length, width, height;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Default constructor<\/span>\r\n    Box() {\r\n        length = width = height = 1;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Constructor with one parameter<\/span>\r\n    Box(<span class=\"kw\">int<\/span> side) {\r\n        length = width = height = side;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Constructor with three parameters<\/span>\r\n    Box(<span class=\"kw\">int<\/span> l, <span class=\"kw\">int<\/span> w, <span class=\"kw\">int<\/span> h) {\r\n        length = l;\r\n        width = w;\r\n        height = h;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Box b1;           <span class=\"cm\">\/\/ Calls default constructor<\/span>\r\n    Box b2(5);        <span class=\"cm\">\/\/ Calls single parameter constructor<\/span>\r\n    Box b3(2, 3, 4);  <span class=\"cm\">\/\/ Calls three parameter constructor<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Copy Constructor<\/h3>\r\n        <p>A copy constructor creates a new object as a copy of an existing object. If not defined, C++ provides a default copy constructor.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Student {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> rollNo;\r\n    string name;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Student(<span class=\"kw\">int<\/span> r, string n) {\r\n        rollNo = r;\r\n        name = n;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Copy constructor<\/span>\r\n    Student(Student &amp;s) {\r\n        rollNo = s.rollNo;\r\n        name = s.name;\r\n        cout &lt;&lt; <span class=\"st\">\"Copy constructor called\\n\"<\/span>;\r\n    }\r\n    \r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; rollNo &lt;&lt; <span class=\"st\">\" - \"<\/span> &lt;&lt; name &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Student s1(101, <span class=\"st\">\"Ali\"<\/span>);\r\n    Student s2 = s1;  <span class=\"cm\">\/\/ Copy constructor called<\/span>\r\n    s2.display();\r\n    <span class=\"cm\">\/\/ Output:\r\n    \/\/ Copy constructor called\r\n    \/\/ 101 - Ali<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>What is a Destructor?<\/h3>\r\n        <p>A <strong>destructor<\/strong> is a special member function that is automatically called when an object is destroyed (goes out of scope). It has the <strong>same name as the class with a tilde (~)<\/strong> prefix and <strong>no parameters or return type<\/strong>. Destructors are used to free resources.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Demo {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Constructor<\/span>\r\n    Demo() {\r\n        cout &lt;&lt; <span class=\"st\">\"Constructor called\\n\"<\/span>;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Destructor<\/span>\r\n    ~Demo() {\r\n        cout &lt;&lt; <span class=\"st\">\"Destructor called\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Demo d;  <span class=\"cm\">\/\/ Constructor called<\/span>\r\n    <span class=\"cm\">\/\/ ... code ...<\/span>\r\n    <span class=\"cm\">\/\/ Destructor automatically called when d goes out of scope<\/span>\r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Constructor vs Destructor<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Feature<\/th><th>Constructor<\/th><th>Destructor<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Name<\/td><td>Same as class name<\/td><td>Same as class name with ~ prefix<\/td><\/tr>\r\n            <tr><td>Called When<\/td><td>Object is created<\/td><td>Object is destroyed<\/td><\/tr>\r\n            <tr><td>Parameters<\/td><td>Can have parameters<\/td><td>No parameters<\/td><\/tr>\r\n            <tr><td>Overloading<\/td><td>Yes \u2014 multiple constructors<\/td><td>No \u2014 only one destructor<\/td><\/tr>\r\n            <tr><td>Purpose<\/td><td>Initialize object<\/td><td>Clean up resources (free memory)<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a class <code>Book<\/code> with attributes title, author, price. Write: (1) Default constructor (2) Parameterized constructor (3) Copy constructor (4) Destructor that displays \"Book destroyed\".<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 5 -->\r\n    <div class=\"unit\" id=\"unit-5\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 5<\/span>\r\n        <h2>Encapsulation \u2014 Data Hiding<\/h2>\r\n        <p>Bundling data and methods, protecting internal details.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is Encapsulation?<\/h3>\r\n        <p><strong>Encapsulation<\/strong> is the concept of bundling data (attributes) and methods (functions) that operate on that data into a single unit (class), and restricting direct access to some of the object's components. This is achieved using <strong>access specifiers<\/strong>.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Think of encapsulation like a capsule medicine \u2014 the medicine (data) is protected inside the capsule, and you can't directly touch it. You take the whole capsule (use public methods) to get the benefit.<\/div>\r\n\r\n        <h3>Why Encapsulation?<\/h3>\r\n        <ul>\r\n          <li><strong>Data Hiding<\/strong> \u2014 Sensitive data is protected from unauthorized access<\/li>\r\n          <li><strong>Control<\/strong> \u2014 You control how data is accessed and modified<\/li>\r\n          <li><strong>Validation<\/strong> \u2014 You can add validation logic in setter methods<\/li>\r\n          <li><strong>Flexibility<\/strong> \u2014 Internal implementation can change without affecting users<\/li>\r\n          <li><strong>Maintainability<\/strong> \u2014 Code is easier to maintain and debug<\/li>\r\n        <\/ul>\r\n\r\n        <h3>Implementing Encapsulation \u2014 Getters and Setters<\/h3>\r\n        <p>We make data members <strong>private<\/strong> and provide <strong>public getter and setter methods<\/strong> to access and modify them.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Student {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"cm\">\/\/ Private data \u2014 hidden from outside<\/span>\r\n    <span class=\"kw\">int<\/span> rollNo;\r\n    string name;\r\n    <span class=\"kw\">float<\/span> gpa;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Setter methods \u2014 to set values with validation<\/span>\r\n    <span class=\"kw\">void<\/span> setRollNo(<span class=\"kw\">int<\/span> r) {\r\n        <span class=\"kw\">if<\/span>(r &gt; 0) {\r\n            rollNo = r;\r\n        } <span class=\"kw\">else<\/span> {\r\n            cout &lt;&lt; <span class=\"st\">\"Invalid roll number!\\n\"<\/span>;\r\n        }\r\n    }\r\n    \r\n    <span class=\"kw\">void<\/span> setName(string n) {\r\n        name = n;\r\n    }\r\n    \r\n    <span class=\"kw\">void<\/span> setGPA(<span class=\"kw\">float<\/span> g) {\r\n        <span class=\"kw\">if<\/span>(g &gt;= 0.0 &amp;&amp; g &lt;= 4.0) {\r\n            gpa = g;\r\n        } <span class=\"kw\">else<\/span> {\r\n            cout &lt;&lt; <span class=\"st\">\"Invalid GPA!\\n\"<\/span>;\r\n        }\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Getter methods \u2014 to get values<\/span>\r\n    <span class=\"kw\">int<\/span> getRollNo() {\r\n        <span class=\"kw\">return<\/span> rollNo;\r\n    }\r\n    \r\n    string getName() {\r\n        <span class=\"kw\">return<\/span> name;\r\n    }\r\n    \r\n    <span class=\"kw\">float<\/span> getGPA() {\r\n        <span class=\"kw\">return<\/span> gpa;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Student s;\r\n    \r\n    <span class=\"cm\">\/\/ Cannot access private data directly<\/span>\r\n    <span class=\"cm\">\/\/ s.rollNo = 101;  \u2717 ERROR<\/span>\r\n    \r\n    <span class=\"cm\">\/\/ Must use public setter methods<\/span>\r\n    s.setRollNo(101);\r\n    s.setName(<span class=\"st\">\"Ahmed\"<\/span>);\r\n    s.setGPA(3.75);\r\n    \r\n    <span class=\"cm\">\/\/ Access using getter methods<\/span>\r\n    cout &lt;&lt; <span class=\"st\">\"Roll No: \"<\/span> &lt;&lt; s.getRollNo() &lt;&lt; endl;\r\n    cout &lt;&lt; <span class=\"st\">\"Name: \"<\/span> &lt;&lt; s.getName() &lt;&lt; endl;\r\n    cout &lt;&lt; <span class=\"st\">\"GPA: \"<\/span> &lt;&lt; s.getGPA() &lt;&lt; endl;\r\n    \r\n    <span class=\"cm\">\/\/ Validation in action<\/span>\r\n    s.setGPA(5.0);  <span class=\"cm\">\/\/ Output: Invalid GPA!<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Real-World Example \u2014 Bank Account<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> BankAccount {\r\n<span class=\"kw\">private<\/span>:\r\n    string accountNo;\r\n    <span class=\"kw\">double<\/span> balance;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    BankAccount(string acc, <span class=\"kw\">double<\/span> bal) {\r\n        accountNo = acc;\r\n        balance = bal;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Controlled deposit<\/span>\r\n    <span class=\"kw\">void<\/span> deposit(<span class=\"kw\">double<\/span> amount) {\r\n        <span class=\"kw\">if<\/span>(amount &gt; 0) {\r\n            balance += amount;\r\n            cout &lt;&lt; <span class=\"st\">\"Deposited: \"<\/span> &lt;&lt; amount &lt;&lt; endl;\r\n        }\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Controlled withdrawal<\/span>\r\n    <span class=\"kw\">void<\/span> withdraw(<span class=\"kw\">double<\/span> amount) {\r\n        <span class=\"kw\">if<\/span>(amount &gt; 0 &amp;&amp; amount &lt;= balance) {\r\n            balance -= amount;\r\n            cout &lt;&lt; <span class=\"st\">\"Withdrawn: \"<\/span> &lt;&lt; amount &lt;&lt; endl;\r\n        } <span class=\"kw\">else<\/span> {\r\n            cout &lt;&lt; <span class=\"st\">\"Insufficient balance or invalid amount!\\n\"<\/span>;\r\n        }\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Read-only access to balance<\/span>\r\n    <span class=\"kw\">double<\/span> getBalance() {\r\n        <span class=\"kw\">return<\/span> balance;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    BankAccount acc(<span class=\"st\">\"ACC001\"<\/span>, 10000);\r\n    \r\n    acc.deposit(5000);\r\n    cout &lt;&lt; <span class=\"st\">\"Balance: \"<\/span> &lt;&lt; acc.getBalance() &lt;&lt; endl;\r\n    \r\n    acc.withdraw(3000);\r\n    cout &lt;&lt; <span class=\"st\">\"Balance: \"<\/span> &lt;&lt; acc.getBalance() &lt;&lt; endl;\r\n    \r\n    acc.withdraw(20000);  <span class=\"cm\">\/\/ Will fail \u2014 insufficient balance<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Benefits of Encapsulation<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Benefit<\/th><th>Explanation<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Security<\/td><td>Prevents unauthorized or accidental modification of data<\/td><\/tr>\r\n            <tr><td>Validation<\/td><td>Allows you to add checks before setting values<\/td><\/tr>\r\n            <tr><td>Flexibility<\/td><td>Internal implementation can be changed without breaking code<\/td><\/tr>\r\n            <tr><td>Read-Only\/Write-Only<\/td><td>Can provide only getters (read-only) or only setters (write-only)<\/td><\/tr>\r\n            <tr><td>Better Debugging<\/td><td>Easier to track where data is being modified<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a class <code>Temperature<\/code> with a private attribute <code>celsius<\/code>. Provide setter with validation (must be above -273.15) and getters for both Celsius and Fahrenheit values.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 6 -->\r\n    <div class=\"unit\" id=\"unit-6\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 6<\/span>\r\n        <h2>Inheritance \u2014 Code Reusability<\/h2>\r\n        <p>Creating new classes from existing ones \u2014 parent and child relationships.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is Inheritance?<\/h3>\r\n        <p><strong>Inheritance<\/strong> is the mechanism by which one class (child\/derived class) acquires the properties and behaviors of another class (parent\/base class). It promotes <strong>code reusability<\/strong> and establishes a relationship between classes.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Think of inheritance like family genes \u2014 a child inherits features from parents. In programming, a derived class inherits attributes and methods from a base class!<\/div>\r\n\r\n        <h3>Why Use Inheritance?<\/h3>\r\n        <ul>\r\n          <li><strong>Code Reusability<\/strong> \u2014 Reuse existing code without rewriting it<\/li>\r\n          <li><strong>Extensibility<\/strong> \u2014 Add new features to existing classes<\/li>\r\n          <li><strong>Hierarchical Classification<\/strong> \u2014 Models real-world relationships (IS-A relationship)<\/li>\r\n          <li><strong>Polymorphism<\/strong> \u2014 Enables runtime polymorphism through virtual functions<\/li>\r\n          <li><strong>Maintainability<\/strong> \u2014 Changes in base class automatically reflect in derived classes<\/li>\r\n        <\/ul>\r\n\r\n        <h3>Inheritance Syntax<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Base class (Parent class)<\/span>\r\n<span class=\"kw\">class<\/span> BaseClass {\r\n    <span class=\"cm\">\/\/ members<\/span>\r\n};\r\n\r\n<span class=\"cm\">\/\/ Derived class (Child class)<\/span>\r\n<span class=\"kw\">class<\/span> DerivedClass : access_specifier BaseClass {\r\n    <span class=\"cm\">\/\/ new members + inherited members<\/span>\r\n};<\/pre><\/div>\r\n\r\n        <h3>Simple Inheritance Example<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">#include<\/span> &lt;iostream&gt;\r\n<span class=\"kw\">using namespace<\/span> std;\r\n\r\n<span class=\"cm\">\/\/ Base class<\/span>\r\n<span class=\"kw\">class<\/span> Animal {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> eat() {\r\n        cout &lt;&lt; <span class=\"st\">\"Animal is eating\\n\"<\/span>;\r\n    }\r\n    \r\n    <span class=\"kw\">void<\/span> sleep() {\r\n        cout &lt;&lt; <span class=\"st\">\"Animal is sleeping\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"cm\">\/\/ Derived class<\/span>\r\n<span class=\"kw\">class<\/span> Dog : <span class=\"kw\">public<\/span> Animal {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> bark() {\r\n        cout &lt;&lt; <span class=\"st\">\"Dog is barking\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Dog d;\r\n    \r\n    <span class=\"cm\">\/\/ Calling inherited methods<\/span>\r\n    d.eat();    <span class=\"cm\">\/\/ From Animal class<\/span>\r\n    d.sleep();  <span class=\"cm\">\/\/ From Animal class<\/span>\r\n    \r\n    <span class=\"cm\">\/\/ Calling own method<\/span>\r\n    d.bark();   <span class=\"cm\">\/\/ From Dog class<\/span>\r\n    \r\n    <span class=\"cm\">\/\/ Output:\r\n    \/\/ Animal is eating\r\n    \/\/ Animal is sleeping\r\n    \/\/ Dog is barking<\/span>\r\n    \r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Modes of Inheritance<\/h3>\r\n        <p>The access specifier used during inheritance determines how base class members are inherited in the derived class.<\/p>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Base Class Member<\/th><th>Public Inheritance<\/th><th>Protected Inheritance<\/th><th>Private Inheritance<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>public<\/td><td>public<\/td><td>protected<\/td><td>private<\/td><\/tr>\r\n            <tr><td>protected<\/td><td>protected<\/td><td>protected<\/td><td>private<\/td><\/tr>\r\n            <tr><td>private<\/td><td>Not inherited<\/td><td>Not inherited<\/td><td>Not inherited<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Public Inheritance (Most Common)<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">int<\/span> publicVar;\r\n<span class=\"kw\">protected<\/span>:\r\n    <span class=\"kw\">int<\/span> protectedVar;\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> privateVar;\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Derived : <span class=\"kw\">public<\/span> Base {\r\n    <span class=\"cm\">\/\/ publicVar remains public<\/span>\r\n    <span class=\"cm\">\/\/ protectedVar remains protected<\/span>\r\n    <span class=\"cm\">\/\/ privateVar is NOT inherited<\/span>\r\n};<\/pre><\/div>\r\n\r\n        <h3>Constructor and Destructor in Inheritance<\/h3>\r\n        <p>When an object of derived class is created, the <strong>base class constructor is called first<\/strong>, then the derived class constructor. Destructors are called in <strong>reverse order<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    Base() {\r\n        cout &lt;&lt; <span class=\"st\">\"Base constructor\\n\"<\/span>;\r\n    }\r\n    ~Base() {\r\n        cout &lt;&lt; <span class=\"st\">\"Base destructor\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Derived : <span class=\"kw\">public<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    Derived() {\r\n        cout &lt;&lt; <span class=\"st\">\"Derived constructor\\n\"<\/span>;\r\n    }\r\n    ~Derived() {\r\n        cout &lt;&lt; <span class=\"st\">\"Derived destructor\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Derived d;\r\n    <span class=\"cm\">\/\/ Output:\r\n    \/\/ Base constructor\r\n    \/\/ Derived constructor\r\n    \/\/ Derived destructor\r\n    \/\/ Base destructor<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Passing Parameters to Base Class Constructor<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Person {\r\n<span class=\"kw\">protected<\/span>:\r\n    string name;\r\n    <span class=\"kw\">int<\/span> age;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Person(string n, <span class=\"kw\">int<\/span> a) {\r\n        name = n;\r\n        age = a;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Student : <span class=\"kw\">public<\/span> Person {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> rollNo;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Pass parameters to base class constructor<\/span>\r\n    Student(string n, <span class=\"kw\">int<\/span> a, <span class=\"kw\">int<\/span> r) : Person(n, a) {\r\n        rollNo = r;\r\n    }\r\n    \r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"Name: \"<\/span> &lt;&lt; name &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Age: \"<\/span> &lt;&lt; age &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Roll No: \"<\/span> &lt;&lt; rollNo &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Student s(<span class=\"st\">\"Ali\"<\/span>, 20, 101);\r\n    s.display();\r\n}<\/pre><\/div>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a base class <code>Vehicle<\/code> with attributes (brand, model) and a derived class <code>Car<\/code> with additional attribute (numberOfDoors). Demonstrate inheritance with proper constructors.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 7 -->\r\n    <div class=\"unit\" id=\"unit-7\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 7<\/span>\r\n        <h2>Types of Inheritance<\/h2>\r\n        <p>Single, Multiple, Multilevel, Hierarchical, and Hybrid inheritance.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>Five Types of Inheritance in C++<\/h3>\r\n        <p>C++ supports various types of inheritance, each with different class relationships.<\/p>\r\n\r\n        <h3>1. Single Inheritance<\/h3>\r\n        <p>One derived class inherits from <strong>one base class<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Diagram: A \u2192 B<\/span>\r\n\r\n<span class=\"kw\">class<\/span> A {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"Class A\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> B : <span class=\"kw\">public<\/span> A {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> show() {\r\n        cout &lt;&lt; <span class=\"st\">\"Class B\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    B obj;\r\n    obj.display();  <span class=\"cm\">\/\/ From class A<\/span>\r\n    obj.show();     <span class=\"cm\">\/\/ From class B<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>2. Multiple Inheritance<\/h3>\r\n        <p>One derived class inherits from <strong>multiple base classes<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Diagram: A, B \u2192 C<\/span>\r\n\r\n<span class=\"kw\">class<\/span> Father {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> showFather() {\r\n        cout &lt;&lt; <span class=\"st\">\"I am the Father\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Mother {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> showMother() {\r\n        cout &lt;&lt; <span class=\"st\">\"I am the Mother\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"cm\">\/\/ Child inherits from both Father and Mother<\/span>\r\n<span class=\"kw\">class<\/span> Child : <span class=\"kw\">public<\/span> Father, <span class=\"kw\">public<\/span> Mother {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> showChild() {\r\n        cout &lt;&lt; <span class=\"st\">\"I am the Child\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Child c;\r\n    c.showFather();  <span class=\"cm\">\/\/ From Father<\/span>\r\n    c.showMother();  <span class=\"cm\">\/\/ From Mother<\/span>\r\n    c.showChild();   <span class=\"cm\">\/\/ From Child<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>3. Multilevel Inheritance<\/h3>\r\n        <p>A class is derived from a class which is also derived from another class \u2014 forming a <strong>chain<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Diagram: A \u2192 B \u2192 C<\/span>\r\n\r\n<span class=\"kw\">class<\/span> Grandfather {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> show1() {\r\n        cout &lt;&lt; <span class=\"st\">\"Grandfather\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Father : <span class=\"kw\">public<\/span> Grandfather {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> show2() {\r\n        cout &lt;&lt; <span class=\"st\">\"Father\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Son : <span class=\"kw\">public<\/span> Father {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> show3() {\r\n        cout &lt;&lt; <span class=\"st\">\"Son\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Son s;\r\n    s.show1();  <span class=\"cm\">\/\/ From Grandfather<\/span>\r\n    s.show2();  <span class=\"cm\">\/\/ From Father<\/span>\r\n    s.show3();  <span class=\"cm\">\/\/ From Son<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>4. Hierarchical Inheritance<\/h3>\r\n        <p><strong>Multiple derived classes<\/strong> inherit from a single base class.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Diagram: A \u2192 B, C, D<\/span>\r\n\r\n<span class=\"kw\">class<\/span> Animal {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> eat() {\r\n        cout &lt;&lt; <span class=\"st\">\"Eating...\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Dog : <span class=\"kw\">public<\/span> Animal {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> bark() {\r\n        cout &lt;&lt; <span class=\"st\">\"Barking...\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Cat : <span class=\"kw\">public<\/span> Animal {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> meow() {\r\n        cout &lt;&lt; <span class=\"st\">\"Meowing...\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Bird : <span class=\"kw\">public<\/span> Animal {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> fly() {\r\n        cout &lt;&lt; <span class=\"st\">\"Flying...\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Dog d;\r\n    d.eat();   <span class=\"cm\">\/\/ All three classes can use eat()<\/span>\r\n    d.bark();\r\n    \r\n    Cat c;\r\n    c.eat();\r\n    c.meow();\r\n}<\/pre><\/div>\r\n\r\n        <h3>5. Hybrid Inheritance<\/h3>\r\n        <p>A combination of two or more types of inheritance. It can cause the <strong>Diamond Problem<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Example: Combination of hierarchical and multiple inheritance<\/span>\r\n\r\n<span class=\"kw\">class<\/span> A {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> displayA() {\r\n        cout &lt;&lt; <span class=\"st\">\"Class A\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> B : <span class=\"kw\">public<\/span> A {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> displayB() {\r\n        cout &lt;&lt; <span class=\"st\">\"Class B\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> C : <span class=\"kw\">public<\/span> A {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> displayC() {\r\n        cout &lt;&lt; <span class=\"st\">\"Class C\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"cm\">\/\/ D inherits from both B and C (which both inherit from A)<\/span>\r\n<span class=\"kw\">class<\/span> D : <span class=\"kw\">public<\/span> B, <span class=\"kw\">public<\/span> C {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> displayD() {\r\n        cout &lt;&lt; <span class=\"st\">\"Class D\\n\"<\/span>;\r\n    }\r\n};<\/pre><\/div>\r\n\r\n        <h3>The Diamond Problem<\/h3>\r\n        <p>In hybrid inheritance, if two parent classes inherit from the same grandparent class, the child class gets <strong>two copies<\/strong> of the grandparent's members, causing ambiguity.<\/p>\r\n        <p><strong>Solution:<\/strong> Use <strong>virtual inheritance<\/strong> to ensure only one copy of the base class is inherited.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> A {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">int<\/span> x;\r\n};\r\n\r\n<span class=\"cm\">\/\/ Virtual inheritance<\/span>\r\n<span class=\"kw\">class<\/span> B : <span class=\"kw\">virtual public<\/span> A { };\r\n<span class=\"kw\">class<\/span> C : <span class=\"kw\">virtual public<\/span> A { };\r\n\r\n<span class=\"kw\">class<\/span> D : <span class=\"kw\">public<\/span> B, <span class=\"kw\">public<\/span> C {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> display() {\r\n        x = 10;  <span class=\"cm\">\/\/ Now there's only one copy of x \u2014 no ambiguity<\/span>\r\n        cout &lt;&lt; x;\r\n    }\r\n};<\/pre><\/div>\r\n\r\n        <h3>Inheritance Types Summary<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Type<\/th><th>Structure<\/th><th>Example<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Single<\/td><td>A \u2192 B<\/td><td>Animal \u2192 Dog<\/td><\/tr>\r\n            <tr><td>Multiple<\/td><td>A, B \u2192 C<\/td><td>Father, Mother \u2192 Child<\/td><\/tr>\r\n            <tr><td>Multilevel<\/td><td>A \u2192 B \u2192 C<\/td><td>Grandfather \u2192 Father \u2192 Son<\/td><\/tr>\r\n            <tr><td>Hierarchical<\/td><td>A \u2192 B, C, D<\/td><td>Animal \u2192 Dog, Cat, Bird<\/td><\/tr>\r\n            <tr><td>Hybrid<\/td><td>Combination<\/td><td>Mix of above types<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Draw diagrams for all 5 types of inheritance. Implement multilevel inheritance: Person \u2192 Employee \u2192 Manager with appropriate attributes and methods.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 8 -->\r\n    <div class=\"unit\" id=\"unit-8\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 8<\/span>\r\n        <h2>Polymorphism \u2014 One Interface, Multiple Forms<\/h2>\r\n        <p>Compile-time and runtime polymorphism explained.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is Polymorphism?<\/h3>\r\n        <p><strong>Polymorphism<\/strong> means \"many forms\". It allows one interface (function or operator) to be used for different types or purposes. The same function name can behave differently based on context.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Real-world example: A person can be a student at school, a customer at a shop, and a player in a game \u2014 same person, different roles (forms) in different contexts!<\/div>\r\n\r\n        <h3>Types of Polymorphism in C++<\/h3>\r\n        <div class=\"concept-grid\">\r\n          <div class=\"concept-card\">\r\n            <div class=\"concept-name\">Compile-Time Polymorphism<\/div>\r\n            <div class=\"concept-rule\">Decision made at compile time. Includes function overloading and operator overloading.<\/div>\r\n          <\/div>\r\n          <div class=\"concept-card\">\r\n            <div class=\"concept-name\">Runtime Polymorphism<\/div>\r\n            <div class=\"concept-rule\">Decision made at runtime. Achieved through virtual functions and inheritance.<\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <h3>1. Compile-Time Polymorphism (Static Binding)<\/h3>\r\n        <p>The function call is resolved at <strong>compile time<\/strong>. Also called <strong>early binding<\/strong> or <strong>static binding<\/strong>.<\/p>\r\n\r\n        <h3>Types of Compile-Time Polymorphism<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Type<\/th><th>Description<\/th><th>Example<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Function Overloading<\/td><td>Multiple functions with same name but different parameters<\/td><td>add(int, int) and add(float, float)<\/td><\/tr>\r\n            <tr><td>Operator Overloading<\/td><td>Giving special meaning to operators for user-defined types<\/td><td>Using + to add two objects<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>2. Runtime Polymorphism (Dynamic Binding)<\/h3>\r\n        <p>The function call is resolved at <strong>runtime<\/strong>. Also called <strong>late binding<\/strong> or <strong>dynamic binding<\/strong>. Achieved through:<\/p>\r\n        <ul>\r\n          <li><strong>Virtual Functions<\/strong> \u2014 Functions in base class marked with <code>virtual<\/code> keyword<\/li>\r\n          <li><strong>Function Overriding<\/strong> \u2014 Redefining base class function in derived class<\/li>\r\n          <li><strong>Pointer\/Reference to Base Class<\/strong> \u2014 Base class pointer pointing to derived class object<\/li>\r\n        <\/ul>\r\n\r\n        <h3>Simple Runtime Polymorphism Example<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Shape {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Virtual function<\/span>\r\n    <span class=\"kw\">virtual void<\/span> draw() {\r\n        cout &lt;&lt; <span class=\"st\">\"Drawing Shape\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Circle : <span class=\"kw\">public<\/span> Shape {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Override base class function<\/span>\r\n    <span class=\"kw\">void<\/span> draw() {\r\n        cout &lt;&lt; <span class=\"st\">\"Drawing Circle\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Rectangle : <span class=\"kw\">public<\/span> Shape {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> draw() {\r\n        cout &lt;&lt; <span class=\"st\">\"Drawing Rectangle\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Shape *ptr;        <span class=\"cm\">\/\/ Base class pointer<\/span>\r\n    \r\n    Circle c;\r\n    Rectangle r;\r\n    \r\n    ptr = &amp;c;          <span class=\"cm\">\/\/ Pointing to Circle object<\/span>\r\n    ptr-&gt;draw();      <span class=\"cm\">\/\/ Output: Drawing Circle<\/span>\r\n    \r\n    ptr = &amp;r;          <span class=\"cm\">\/\/ Pointing to Rectangle object<\/span>\r\n    ptr-&gt;draw();      <span class=\"cm\">\/\/ Output: Drawing Rectangle<\/span>\r\n    \r\n    <span class=\"cm\">\/\/ Same pointer, different behaviors \u2014 this is polymorphism!<\/span>\r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Compile-Time vs Runtime Polymorphism<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Feature<\/th><th>Compile-Time<\/th><th>Runtime<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Binding Time<\/td><td>Compile time (early binding)<\/td><td>Runtime (late binding)<\/td><\/tr>\r\n            <tr><td>Achieved By<\/td><td>Function\/operator overloading<\/td><td>Virtual functions, inheritance<\/td><\/tr>\r\n            <tr><td>Performance<\/td><td>Faster \u2014 resolved at compile time<\/td><td>Slightly slower \u2014 resolved at runtime<\/td><\/tr>\r\n            <tr><td>Flexibility<\/td><td>Less flexible<\/td><td>More flexible<\/td><\/tr>\r\n            <tr><td>Example<\/td><td>add(int, int) and add(float, float)<\/td><td>Base pointer calling derived function<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Real-World Polymorphism Example<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Employee {\r\n<span class=\"kw\">protected<\/span>:\r\n    string name;\r\n    <span class=\"kw\">int<\/span> id;\r\n<span class=\"kw\">public<\/span>:\r\n    Employee(string n, <span class=\"kw\">int<\/span> i) : name(n), id(i) {}\r\n    \r\n    <span class=\"kw\">virtual void<\/span> calculateSalary() {\r\n        cout &lt;&lt; <span class=\"st\">\"Employee salary calculation\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Manager : <span class=\"kw\">public<\/span> Employee {\r\n<span class=\"kw\">public<\/span>:\r\n    Manager(string n, <span class=\"kw\">int<\/span> i) : Employee(n, i) {}\r\n    \r\n    <span class=\"kw\">void<\/span> calculateSalary() {\r\n        cout &lt;&lt; <span class=\"st\">\"Manager: Base + Bonus + Benefits\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Developer : <span class=\"kw\">public<\/span> Employee {\r\n<span class=\"kw\">public<\/span>:\r\n    Developer(string n, <span class=\"kw\">int<\/span> i) : Employee(n, i) {}\r\n    \r\n    <span class=\"kw\">void<\/span> calculateSalary() {\r\n        cout &lt;&lt; <span class=\"st\">\"Developer: Base + Project Bonus\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Employee *emp;\r\n    \r\n    Manager m(<span class=\"st\">\"Ali\"<\/span>, 101);\r\n    Developer d(<span class=\"st\">\"Sara\"<\/span>, 102);\r\n    \r\n    emp = &amp;m;\r\n    emp-&gt;calculateSalary();  <span class=\"cm\">\/\/ Manager's version<\/span>\r\n    \r\n    emp = &amp;d;\r\n    emp-&gt;calculateSalary();  <span class=\"cm\">\/\/ Developer's version<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Explain the difference between compile-time and runtime polymorphism with examples. Create a base class <code>Vehicle<\/code> with virtual function <code>speed()<\/code> and derived classes <code>Car<\/code> and <code>Bike<\/code> that override it.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 9 -->\r\n    <div class=\"unit\" id=\"unit-9\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 9<\/span>\r\n        <h2>Function Overloading<\/h2>\r\n        <p>Same function name, different parameters \u2014 compile-time polymorphism.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is Function Overloading?<\/h3>\r\n        <p><strong>Function overloading<\/strong> allows multiple functions with the <strong>same name<\/strong> but <strong>different parameters<\/strong> (number, type, or order) to exist in the same scope. The compiler determines which function to call based on the arguments passed.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Think of function overloading like a restaurant menu \u2014 \"Order Pizza\" can mean cheese pizza, pepperoni pizza, or veggie pizza depending on what you specify!<\/div>\r\n\r\n        <h3>Ways to Overload Functions<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Method<\/th><th>Description<\/th><th>Example<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Number of Parameters<\/td><td>Different number of arguments<\/td><td>add(int, int) and add(int, int, int)<\/td><\/tr>\r\n            <tr><td>Type of Parameters<\/td><td>Different data types<\/td><td>add(int, int) and add(float, float)<\/td><\/tr>\r\n            <tr><td>Order of Parameters<\/td><td>Different sequence<\/td><td>display(int, float) and display(float, int)<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Example 1: Different Number of Parameters<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">#include<\/span> &lt;iostream&gt;\r\n<span class=\"kw\">using namespace<\/span> std;\r\n\r\n<span class=\"cm\">\/\/ Function with 2 parameters<\/span>\r\n<span class=\"kw\">int<\/span> add(<span class=\"kw\">int<\/span> a, <span class=\"kw\">int<\/span> b) {\r\n    <span class=\"kw\">return<\/span> a + b;\r\n}\r\n\r\n<span class=\"cm\">\/\/ Function with 3 parameters<\/span>\r\n<span class=\"kw\">int<\/span> add(<span class=\"kw\">int<\/span> a, <span class=\"kw\">int<\/span> b, <span class=\"kw\">int<\/span> c) {\r\n    <span class=\"kw\">return<\/span> a + b + c;\r\n}\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    cout &lt;&lt; add(5, 10) &lt;&lt; endl;      <span class=\"cm\">\/\/ Calls first function \u2192 15<\/span>\r\n    cout &lt;&lt; add(5, 10, 15) &lt;&lt; endl;  <span class=\"cm\">\/\/ Calls second function \u2192 30<\/span>\r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Example 2: Different Type of Parameters<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Calculator {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Function with int parameters<\/span>\r\n    <span class=\"kw\">int<\/span> multiply(<span class=\"kw\">int<\/span> a, <span class=\"kw\">int<\/span> b) {\r\n        cout &lt;&lt; <span class=\"st\">\"Integer multiply: \"<\/span>;\r\n        <span class=\"kw\">return<\/span> a * b;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Function with float parameters<\/span>\r\n    <span class=\"kw\">float<\/span> multiply(<span class=\"kw\">float<\/span> a, <span class=\"kw\">float<\/span> b) {\r\n        cout &lt;&lt; <span class=\"st\">\"Float multiply: \"<\/span>;\r\n        <span class=\"kw\">return<\/span> a * b;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Function with double parameters<\/span>\r\n    <span class=\"kw\">double<\/span> multiply(<span class=\"kw\">double<\/span> a, <span class=\"kw\">double<\/span> b) {\r\n        cout &lt;&lt; <span class=\"st\">\"Double multiply: \"<\/span>;\r\n        <span class=\"kw\">return<\/span> a * b;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Calculator calc;\r\n    \r\n    cout &lt;&lt; calc.multiply(5, 3) &lt;&lt; endl;          <span class=\"cm\">\/\/ Calls int version<\/span>\r\n    cout &lt;&lt; calc.multiply(2.5f, 3.2f) &lt;&lt; endl;    <span class=\"cm\">\/\/ Calls float version<\/span>\r\n    cout &lt;&lt; calc.multiply(2.5, 3.2) &lt;&lt; endl;      <span class=\"cm\">\/\/ Calls double version<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Example 3: Different Order of Parameters<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">void<\/span> display(<span class=\"kw\">int<\/span> x, <span class=\"kw\">float<\/span> y) {\r\n    cout &lt;&lt; <span class=\"st\">\"Int: \"<\/span> &lt;&lt; x &lt;&lt; <span class=\"st\">\", Float: \"<\/span> &lt;&lt; y &lt;&lt; endl;\r\n}\r\n\r\n<span class=\"kw\">void<\/span> display(<span class=\"kw\">float<\/span> x, <span class=\"kw\">int<\/span> y) {\r\n    cout &lt;&lt; <span class=\"st\">\"Float: \"<\/span> &lt;&lt; x &lt;&lt; <span class=\"st\">\", Int: \"<\/span> &lt;&lt; y &lt;&lt; endl;\r\n}\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    display(10, 3.5f);    <span class=\"cm\">\/\/ Calls first version<\/span>\r\n    display(3.5f, 10);    <span class=\"cm\">\/\/ Calls second version<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Rules for Function Overloading<\/h3>\r\n        <ul>\r\n          <li><strong>Same function name<\/strong> \u2014 All overloaded functions must have the same name<\/li>\r\n          <li><strong>Different parameters<\/strong> \u2014 Must differ in number, type, or order of parameters<\/li>\r\n          <li><strong>Return type alone is NOT enough<\/strong> \u2014 Functions can't differ only by return type<\/li>\r\n          <li><strong>Must be in same scope<\/strong> \u2014 All overloaded functions must be in the same class or namespace<\/li>\r\n        <\/ul>\r\n\r\n        <h3>Invalid Function Overloading<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ \u2717 ERROR: Different return type only \u2014 NOT ALLOWED<\/span>\r\n<span class=\"kw\">int<\/span> getValue() {\r\n    <span class=\"kw\">return<\/span> 10;\r\n}\r\n\r\n<span class=\"kw\">float<\/span> getValue() {  <span class=\"cm\">\/\/ ERROR \u2014 can't overload based only on return type<\/span>\r\n    <span class=\"kw\">return<\/span> 3.5;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Practical Example \u2014 Area Calculation<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Area {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Area of square<\/span>\r\n    <span class=\"kw\">float<\/span> calculate(<span class=\"kw\">float<\/span> side) {\r\n        <span class=\"kw\">return<\/span> side * side;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Area of rectangle<\/span>\r\n    <span class=\"kw\">float<\/span> calculate(<span class=\"kw\">float<\/span> length, <span class=\"kw\">float<\/span> width) {\r\n        <span class=\"kw\">return<\/span> length * width;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Area of circle<\/span>\r\n    <span class=\"kw\">float<\/span> calculate(<span class=\"kw\">float<\/span> radius, <span class=\"kw\">bool<\/span> isCircle) {\r\n        <span class=\"kw\">return<\/span> 3.14159 * radius * radius;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Area a;\r\n    \r\n    cout &lt;&lt; <span class=\"st\">\"Square: \"<\/span> &lt;&lt; a.calculate(5.0) &lt;&lt; endl;\r\n    cout &lt;&lt; <span class=\"st\">\"Rectangle: \"<\/span> &lt;&lt; a.calculate(4.0, 6.0) &lt;&lt; endl;\r\n    cout &lt;&lt; <span class=\"st\">\"Circle: \"<\/span> &lt;&lt; a.calculate(3.0, <span class=\"kw\">true<\/span>) &lt;&lt; endl;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Benefits of Function Overloading<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Benefit<\/th><th>Explanation<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Code Clarity<\/td><td>Same name for similar operations makes code easier to read<\/td><\/tr>\r\n            <tr><td>Flexibility<\/td><td>Handle different data types with the same function name<\/td><\/tr>\r\n            <tr><td>Consistency<\/td><td>Logical naming \u2014 all \"add\" functions actually add things<\/td><\/tr>\r\n            <tr><td>Less Memory<\/td><td>No need to remember multiple function names<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a class <code>Print<\/code> with overloaded function <code>show()<\/code> that can display: (1) an integer (2) a float (3) a string (4) two integers. Test all versions in main().<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 10 -->\r\n    <div class=\"unit\" id=\"unit-10\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 10<\/span>\r\n        <h2>Operator Overloading<\/h2>\r\n        <p>Giving special meaning to operators for user-defined types.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is Operator Overloading?<\/h3>\r\n        <p><strong>Operator overloading<\/strong> allows you to redefine how operators (+, -, *, ==, etc.) work with user-defined types (classes). It makes your code more intuitive and natural.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Example: You can't directly add two \"Complex\" number objects using +, but with operator overloading, you can write: c3 = c1 + c2, just like adding regular numbers!<\/div>\r\n\r\n        <h3>Syntax of Operator Overloading<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">return_type<\/span> <span class=\"kw\">operator<\/span> symbol (parameters) {\r\n    <span class=\"cm\">\/\/ code<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Example \u2014 Overloading + Operator<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Complex {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> real, imag;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Complex(<span class=\"kw\">int<\/span> r = 0, <span class=\"kw\">int<\/span> i = 0) {\r\n        real = r;\r\n        imag = i;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Overload + operator<\/span>\r\n    Complex <span class=\"kw\">operator<\/span> + (Complex &amp;obj) {\r\n        Complex temp;\r\n        temp.real = real + obj.real;\r\n        temp.imag = imag + obj.imag;\r\n        <span class=\"kw\">return<\/span> temp;\r\n    }\r\n    \r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; real &lt;&lt; <span class=\"st\">\" + \"<\/span> &lt;&lt; imag &lt;&lt; <span class=\"st\">\"i\"<\/span> &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Complex c1(3, 4), c2(1, 2);\r\n    \r\n    Complex c3 = c1 + c2;  <span class=\"cm\">\/\/ Using overloaded + operator<\/span>\r\n    \r\n    c3.display();  <span class=\"cm\">\/\/ Output: 4 + 6i<\/span>\r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Operators That Can Be Overloaded<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Category<\/th><th>Operators<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Arithmetic<\/td><td>+, -, *, \/, %, ++, --<\/td><\/tr>\r\n            <tr><td>Relational<\/td><td>==, !=, &lt;, &gt;, &lt;=, &gt;=<\/td><\/tr>\r\n            <tr><td>Logical<\/td><td>&amp;&amp;, ||, !<\/td><\/tr>\r\n            <tr><td>Bitwise<\/td><td>&amp;, |, ^, ~, &lt;&lt;, &gt;&gt;<\/td><\/tr>\r\n            <tr><td>Assignment<\/td><td>=, +=, -=, *=, \/=<\/td><\/tr>\r\n            <tr><td>Other<\/td><td>[], (), -&gt;, &lt;&lt;, &gt;&gt;, new, delete<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Operators That CANNOT Be Overloaded<\/h3>\r\n        <ul>\r\n          <li><code>::<\/code> \u2014 Scope resolution operator<\/li>\r\n          <li><code>.<\/code> \u2014 Member access operator<\/li>\r\n          <li><code>.*<\/code> \u2014 Pointer to member operator<\/li>\r\n          <li><code>?:<\/code> \u2014 Ternary operator<\/li>\r\n          <li><code>sizeof<\/code> \u2014 Size operator<\/li>\r\n        <\/ul>\r\n\r\n        <h3>Overloading ++ Operator (Unary)<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Counter {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> count;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Counter() : count(0) {}\r\n    \r\n    <span class=\"cm\">\/\/ Overload prefix ++ (++obj)<\/span>\r\n    <span class=\"kw\">void operator<\/span> ++ () {\r\n        ++count;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Overload postfix ++ (obj++)<\/span>\r\n    <span class=\"kw\">void operator<\/span> ++ (<span class=\"kw\">int<\/span>) {\r\n        count++;\r\n    }\r\n    \r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"Count: \"<\/span> &lt;&lt; count &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Counter c;\r\n    ++c;  <span class=\"cm\">\/\/ Prefix increment<\/span>\r\n    c++;  <span class=\"cm\">\/\/ Postfix increment<\/span>\r\n    c.display();  <span class=\"cm\">\/\/ Output: Count: 2<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Overloading == Operator<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Point {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> x, y;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Point(<span class=\"kw\">int<\/span> a = 0, <span class=\"kw\">int<\/span> b = 0) : x(a), y(b) {}\r\n    \r\n    <span class=\"cm\">\/\/ Overload == operator<\/span>\r\n    <span class=\"kw\">bool operator<\/span> == (Point &amp;p) {\r\n        <span class=\"kw\">return<\/span> (x == p.x &amp;&amp; y == p.y);\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Point p1(5, 10), p2(5, 10), p3(3, 7);\r\n    \r\n    <span class=\"kw\">if<\/span>(p1 == p2)\r\n        cout &lt;&lt; <span class=\"st\">\"p1 and p2 are equal\\n\"<\/span>;\r\n    <span class=\"kw\">else<\/span>\r\n        cout &lt;&lt; <span class=\"st\">\"p1 and p2 are not equal\\n\"<\/span>;\r\n    \r\n    <span class=\"kw\">if<\/span>(p1 == p3)\r\n        cout &lt;&lt; <span class=\"st\">\"p1 and p3 are equal\\n\"<\/span>;\r\n    <span class=\"kw\">else<\/span>\r\n        cout &lt;&lt; <span class=\"st\">\"p1 and p3 are not equal\\n\"<\/span>;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Overloading &lt;&lt; Operator (Stream Insertion)<\/h3>\r\n        <p>To use <code>cout &lt;&lt; obj<\/code> syntax, we overload the <code>&lt;&lt;<\/code> operator as a <strong>friend function<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Student {\r\n<span class=\"kw\">private<\/span>:\r\n    string name;\r\n    <span class=\"kw\">int<\/span> rollNo;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Student(string n, <span class=\"kw\">int<\/span> r) : name(n), rollNo(r) {}\r\n    \r\n    <span class=\"cm\">\/\/ Friend function for &lt;&lt; operator<\/span>\r\n    <span class=\"kw\">friend<\/span> ostream&amp; <span class=\"kw\">operator<\/span> &lt;&lt; (ostream &amp;out, Student &amp;s);\r\n};\r\n\r\n<span class=\"cm\">\/\/ Definition of &lt;&lt; operator<\/span>\r\nostream&amp; <span class=\"kw\">operator<\/span> &lt;&lt; (ostream &amp;out, Student &amp;s) {\r\n    out &lt;&lt; <span class=\"st\">\"Name: \"<\/span> &lt;&lt; s.name &lt;&lt; <span class=\"st\">\", Roll No: \"<\/span> &lt;&lt; s.rollNo;\r\n    <span class=\"kw\">return<\/span> out;\r\n}\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Student s(<span class=\"st\">\"Ali\"<\/span>, 101);\r\n    cout &lt;&lt; s &lt;&lt; endl;  <span class=\"cm\">\/\/ Output: Name: Ali, Roll No: 101<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Rules for Operator Overloading<\/h3>\r\n        <ul>\r\n          <li>Only existing operators can be overloaded \u2014 you can't create new operators<\/li>\r\n          <li>At least one operand must be a user-defined type<\/li>\r\n          <li>Operator's original precedence and associativity cannot be changed<\/li>\r\n          <li>Cannot overload operators for built-in types (can't change how int + int works)<\/li>\r\n          <li>Some operators must be overloaded as member functions (=, [], (), -&gt;)<\/li>\r\n        <\/ul>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a class <code>Distance<\/code> with feet and inches. Overload: (1) + operator to add two distances (2) == operator to compare distances (3) &lt;&lt; operator to display distance.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 11 -->\r\n    <div class=\"unit\" id=\"unit-11\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 11<\/span>\r\n        <h2>Virtual Functions and Abstract Classes<\/h2>\r\n        <p>Runtime polymorphism and pure virtual functions explained.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is a Virtual Function?<\/h3>\r\n        <p>A <strong>virtual function<\/strong> is a member function in the base class that you expect to be redefined in derived classes. It is declared using the <code>virtual<\/code> keyword. Virtual functions enable <strong>runtime polymorphism<\/strong>.<\/p>\r\n\r\n        <h3>Why Virtual Functions?<\/h3>\r\n        <p>Without <code>virtual<\/code>, a base class pointer calls the base class version of the function, even if it points to a derived class object. With <code>virtual<\/code>, the correct derived class function is called.<\/p>\r\n\r\n        <h3>Example \u2014 Without Virtual Function<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"Base class\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Derived : <span class=\"kw\">public<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"Derived class\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Base *ptr;\r\n    Derived d;\r\n    ptr = &amp;d;\r\n    \r\n    ptr-&gt;display();  <span class=\"cm\">\/\/ Output: Base class (NOT what we want!)<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Example \u2014 With Virtual Function<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">virtual void<\/span> display() {  <span class=\"cm\">\/\/ virtual keyword added<\/span>\r\n        cout &lt;&lt; <span class=\"st\">\"Base class\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Derived : <span class=\"kw\">public<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"Derived class\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Base *ptr;\r\n    Derived d;\r\n    ptr = &amp;d;\r\n    \r\n    ptr-&gt;display();  <span class=\"cm\">\/\/ Output: Derived class \u2713 Correct!<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Pure Virtual Function<\/h3>\r\n        <p>A <strong>pure virtual function<\/strong> is a virtual function with <strong>no implementation<\/strong> in the base class. It is declared by assigning <code>= 0<\/code>. Any class containing a pure virtual function becomes an <strong>abstract class<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Shape {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Pure virtual function<\/span>\r\n    <span class=\"kw\">virtual void<\/span> draw() = 0;\r\n};<\/pre><\/div>\r\n\r\n        <h3>Abstract Class<\/h3>\r\n        <p>An <strong>abstract class<\/strong> is a class that contains at least one pure virtual function. You <strong>cannot create objects<\/strong> of an abstract class \u2014 it is meant to be inherited.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Animal {  <span class=\"cm\">\/\/ Abstract class<\/span>\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">virtual void<\/span> sound() = 0;  <span class=\"cm\">\/\/ Pure virtual function<\/span>\r\n    \r\n    <span class=\"kw\">void<\/span> eat() {\r\n        cout &lt;&lt; <span class=\"st\">\"Eating...\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Dog : <span class=\"kw\">public<\/span> Animal {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> sound() {  <span class=\"cm\">\/\/ Must implement pure virtual function<\/span>\r\n        cout &lt;&lt; <span class=\"st\">\"Bark bark!\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Cat : <span class=\"kw\">public<\/span> Animal {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> sound() {\r\n        cout &lt;&lt; <span class=\"st\">\"Meow meow!\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    <span class=\"cm\">\/\/ Animal a;  \u2717 ERROR \u2014 Cannot create object of abstract class<\/span>\r\n    \r\n    Animal *ptr;\r\n    Dog d;\r\n    Cat c;\r\n    \r\n    ptr = &amp;d;\r\n    ptr-&gt;sound();  <span class=\"cm\">\/\/ Output: Bark bark!<\/span>\r\n    \r\n    ptr = &amp;c;\r\n    ptr-&gt;sound();  <span class=\"cm\">\/\/ Output: Meow meow!<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Virtual Destructor<\/h3>\r\n        <p>If a base class pointer points to a derived class object, and you delete the pointer, only the base class destructor is called unless the destructor is <strong>virtual<\/strong>.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">virtual<\/span> ~Base() {  <span class=\"cm\">\/\/ Virtual destructor<\/span>\r\n        cout &lt;&lt; <span class=\"st\">\"Base destructor\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">class<\/span> Derived : <span class=\"kw\">public<\/span> Base {\r\n<span class=\"kw\">public<\/span>:\r\n    ~Derived() {\r\n        cout &lt;&lt; <span class=\"st\">\"Derived destructor\\n\"<\/span>;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Base *ptr = <span class=\"kw\">new<\/span> Derived();\r\n    <span class=\"kw\">delete<\/span> ptr;  <span class=\"cm\">\/\/ Both destructors called due to virtual<\/span>\r\n    <span class=\"cm\">\/\/ Output:\r\n    \/\/ Derived destructor\r\n    \/\/ Base destructor<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Virtual vs Pure Virtual Function<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Feature<\/th><th>Virtual Function<\/th><th>Pure Virtual Function<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Declaration<\/td><td>virtual void func() { }<\/td><td>virtual void func() = 0;<\/td><\/tr>\r\n            <tr><td>Implementation<\/td><td>Has implementation in base class<\/td><td>No implementation in base class<\/td><\/tr>\r\n            <tr><td>Class Type<\/td><td>Class remains concrete<\/td><td>Class becomes abstract<\/td><\/tr>\r\n            <tr><td>Object Creation<\/td><td>Can create objects of the class<\/td><td>Cannot create objects<\/td><\/tr>\r\n            <tr><td>Overriding<\/td><td>Optional in derived class<\/td><td>Must be overridden in derived class<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create an abstract class <code>Vehicle<\/code> with pure virtual function <code>speed()<\/code>. Create derived classes <code>Car<\/code> and <code>Bike<\/code> that implement <code>speed()<\/code>. Use base class pointer to demonstrate runtime polymorphism.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 12 -->\r\n    <div class=\"unit\" id=\"unit-12\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 12<\/span>\r\n        <h2>Friend Functions and Friend Classes<\/h2>\r\n        <p>Breaking encapsulation when needed \u2014 controlled access to private members.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What is a Friend Function?<\/h3>\r\n        <p>A <strong>friend function<\/strong> is a function that is <strong>not a member<\/strong> of a class but has <strong>access to its private and protected members<\/strong>. It is declared using the <code>friend<\/code> keyword inside the class.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Friend functions break the encapsulation rule, but sometimes they're necessary \u2014 like when you need two classes to share data or when overloading certain operators like &lt;&lt; and &gt;&gt;.<\/div>\r\n\r\n        <h3>Friend Function Syntax<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> MyClass {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> data;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ Declare friend function<\/span>\r\n    <span class=\"kw\">friend void<\/span> showData(MyClass obj);\r\n};\r\n\r\n<span class=\"cm\">\/\/ Define friend function (outside class, no ::)<\/span>\r\n<span class=\"kw\">void<\/span> showData(MyClass obj) {\r\n    cout &lt;&lt; obj.data;  <span class=\"cm\">\/\/ Can access private member<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Simple Friend Function Example<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Box {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> length;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Box(<span class=\"kw\">int<\/span> l) : length(l) {}\r\n    \r\n    <span class=\"cm\">\/\/ Declare friend function<\/span>\r\n    <span class=\"kw\">friend void<\/span> printLength(Box b);\r\n};\r\n\r\n<span class=\"cm\">\/\/ Friend function definition<\/span>\r\n<span class=\"kw\">void<\/span> printLength(Box b) {\r\n    cout &lt;&lt; <span class=\"st\">\"Length: \"<\/span> &lt;&lt; b.length &lt;&lt; endl;  <span class=\"cm\">\/\/ Accessing private member<\/span>\r\n}\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Box b(10);\r\n    printLength(b);  <span class=\"cm\">\/\/ Output: Length: 10<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Friend Function with Two Classes<\/h3>\r\n        <p>A friend function can access private members of multiple classes.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> ClassB;  <span class=\"cm\">\/\/ Forward declaration<\/span>\r\n\r\n<span class=\"kw\">class<\/span> ClassA {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> numA;\r\n<span class=\"kw\">public<\/span>:\r\n    ClassA(<span class=\"kw\">int<\/span> n) : numA(n) {}\r\n    <span class=\"kw\">friend void<\/span> compare(ClassA, ClassB);\r\n};\r\n\r\n<span class=\"kw\">class<\/span> ClassB {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> numB;\r\n<span class=\"kw\">public<\/span>:\r\n    ClassB(<span class=\"kw\">int<\/span> n) : numB(n) {}\r\n    <span class=\"kw\">friend void<\/span> compare(ClassA, ClassB);\r\n};\r\n\r\n<span class=\"cm\">\/\/ Friend function accessing both classes<\/span>\r\n<span class=\"kw\">void<\/span> compare(ClassA a, ClassB b) {\r\n    <span class=\"kw\">if<\/span>(a.numA &gt; b.numB)\r\n        cout &lt;&lt; <span class=\"st\">\"ClassA is greater\\n\"<\/span>;\r\n    <span class=\"kw\">else<\/span>\r\n        cout &lt;&lt; <span class=\"st\">\"ClassB is greater\\n\"<\/span>;\r\n}\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    ClassA objA(10);\r\n    ClassB objB(20);\r\n    compare(objA, objB);  <span class=\"cm\">\/\/ Output: ClassB is greater<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>What is a Friend Class?<\/h3>\r\n        <p>A <strong>friend class<\/strong> is a class whose all member functions are friend functions of another class. It can access all private and protected members of the class that declared it as a friend.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> ClassB {\r\n<span class=\"kw\">private<\/span>:\r\n    <span class=\"kw\">int<\/span> secret;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    ClassB(<span class=\"kw\">int<\/span> s) : secret(s) {}\r\n    \r\n    <span class=\"cm\">\/\/ Declare ClassA as friend<\/span>\r\n    <span class=\"kw\">friend class<\/span> ClassA;\r\n};\r\n\r\n<span class=\"kw\">class<\/span> ClassA {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> showSecret(ClassB &amp;obj) {\r\n        <span class=\"cm\">\/\/ Can access private member of ClassB<\/span>\r\n        cout &lt;&lt; <span class=\"st\">\"Secret: \"<\/span> &lt;&lt; obj.secret &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    ClassB b(123);\r\n    ClassA a;\r\n    a.showSecret(b);  <span class=\"cm\">\/\/ Output: Secret: 123<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Properties of Friend Functions<\/h3>\r\n        <ul>\r\n          <li><strong>Not a member<\/strong> \u2014 Friend function is not a member of the class<\/li>\r\n          <li><strong>Can't access directly<\/strong> \u2014 Needs an object to access members (can't use <code>this<\/code>)<\/li>\r\n          <li><strong>Not inherited<\/strong> \u2014 Friendship is not inherited by derived classes<\/li>\r\n          <li><strong>Not transitive<\/strong> \u2014 If A is friend of B, and B is friend of C, A is NOT automatically friend of C<\/li>\r\n          <li><strong>One-way<\/strong> \u2014 Friendship is granted by the class, not taken<\/li>\r\n        <\/ul>\r\n\r\n        <h3>When to Use Friend Functions?<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Use Case<\/th><th>Reason<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Operator Overloading<\/td><td>Operators like &lt;&lt;, &gt;&gt; need to access private members but can't be members<\/td><\/tr>\r\n            <tr><td>Two Classes Need Each Other's Data<\/td><td>When two classes need to share private data<\/td><\/tr>\r\n            <tr><td>Performance<\/td><td>Direct access to private members can be faster than getters\/setters<\/td><\/tr>\r\n            <tr><td>Bridge Between Classes<\/td><td>When you need a function that works with multiple classes<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Friend Function vs Member Function<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Feature<\/th><th>Member Function<\/th><th>Friend Function<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Defined<\/td><td>Inside the class (or using ::)<\/td><td>Outside the class<\/td><\/tr>\r\n            <tr><td>Access<\/td><td>Can access private members<\/td><td>Can access private members<\/td><\/tr>\r\n            <tr><td>Calling<\/td><td>Called using object (obj.func())<\/td><td>Called like normal function (func(obj))<\/td><\/tr>\r\n            <tr><td>This Pointer<\/td><td>Has access to <code>this<\/code> pointer<\/td><td>No access to <code>this<\/code><\/td><\/tr>\r\n            <tr><td>Inheritance<\/td><td>Inherited by derived classes<\/td><td>Not inherited<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create two classes <code>Student<\/code> and <code>Teacher<\/code>. Write a friend function <code>checkEligibility()<\/code> that accesses private marks from Student and private experience from Teacher to determine if a student can be mentored.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 13 -->\r\n    <div class=\"unit\" id=\"unit-13\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 13<\/span>\r\n        <h2>Templates \u2014 Generic Programming<\/h2>\r\n        <p>Writing code that works with any data type \u2014 function and class templates.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>What are Templates?<\/h3>\r\n        <p><strong>Templates<\/strong> allow you to write generic code that works with any data type. Instead of writing separate functions for int, float, string, etc., you write one template that works for all types.<\/p>\r\n        <div class=\"info-box\">\ud83d\udca1 Think of templates like a cookie cutter \u2014 you have one cutter (template), but you can use it with different doughs (data types) to make different cookies!<\/div>\r\n\r\n        <h3>Why Use Templates?<\/h3>\r\n        <ul>\r\n          <li><strong>Code Reusability<\/strong> \u2014 Write once, use with any data type<\/li>\r\n          <li><strong>Type Safety<\/strong> \u2014 Compiler checks types at compile time<\/li>\r\n          <li><strong>Performance<\/strong> \u2014 No runtime overhead (unlike polymorphism)<\/li>\r\n          <li><strong>Generic Programming<\/strong> \u2014 Write algorithms independent of data types<\/li>\r\n          <li><strong>STL Foundation<\/strong> \u2014 Standard Template Library (vector, list, map) uses templates<\/li>\r\n        <\/ul>\r\n\r\n        <h3>1. Function Templates<\/h3>\r\n        <p>A <strong>function template<\/strong> defines a family of functions that can work with different data types.<\/p>\r\n\r\n        <h3>Function Template Syntax<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">template<\/span> &lt;<span class=\"kw\">typename<\/span> T&gt;  <span class=\"cm\">\/\/ or template&lt;class T&gt;<\/span>\r\nT functionName(T parameter) {\r\n    <span class=\"cm\">\/\/ code using T<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Simple Function Template Example<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">#include<\/span> &lt;iostream&gt;\r\n<span class=\"kw\">using namespace<\/span> std;\r\n\r\n<span class=\"cm\">\/\/ Function template<\/span>\r\n<span class=\"kw\">template<\/span> &lt;<span class=\"kw\">typename<\/span> T&gt;\r\nT getMax(T a, T b) {\r\n    <span class=\"kw\">return<\/span> (a &gt; b) ? a : b;\r\n}\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    cout &lt;&lt; getMax(10, 20) &lt;&lt; endl;        <span class=\"cm\">\/\/ Works with int \u2192 20<\/span>\r\n    cout &lt;&lt; getMax(5.5, 2.3) &lt;&lt; endl;      <span class=\"cm\">\/\/ Works with double \u2192 5.5<\/span>\r\n    cout &lt;&lt; getMax('a', 'z') &lt;&lt; endl;      <span class=\"cm\">\/\/ Works with char \u2192 z<\/span>\r\n    \r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Function Template with Multiple Parameters<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">template<\/span> &lt;<span class=\"kw\">typename<\/span> T1, <span class=\"kw\">typename<\/span> T2&gt;\r\n<span class=\"kw\">void<\/span> display(T1 a, T2 b) {\r\n    cout &lt;&lt; <span class=\"st\">\"First: \"<\/span> &lt;&lt; a &lt;&lt; <span class=\"st\">\", Second: \"<\/span> &lt;&lt; b &lt;&lt; endl;\r\n}\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    display(10, 3.14);           <span class=\"cm\">\/\/ int and double<\/span>\r\n    display(<span class=\"st\">\"Hello\"<\/span>, 100);       <span class=\"cm\">\/\/ string and int<\/span>\r\n    display('A', <span class=\"st\">\"Grade\"<\/span>);        <span class=\"cm\">\/\/ char and string<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>2. Class Templates<\/h3>\r\n        <p>A <strong>class template<\/strong> defines a generic class that can work with different data types.<\/p>\r\n\r\n        <h3>Class Template Syntax<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">template<\/span> &lt;<span class=\"kw\">typename<\/span> T&gt;\r\n<span class=\"kw\">class<\/span> ClassName {\r\n<span class=\"kw\">private<\/span>:\r\n    T data;\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"cm\">\/\/ methods using T<\/span>\r\n};<\/pre><\/div>\r\n\r\n        <h3>Simple Class Template Example<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">template<\/span> &lt;<span class=\"kw\">typename<\/span> T&gt;\r\n<span class=\"kw\">class<\/span> Calculator {\r\n<span class=\"kw\">private<\/span>:\r\n    T num1, num2;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Calculator(T a, T b) {\r\n        num1 = a;\r\n        num2 = b;\r\n    }\r\n    \r\n    T add() {\r\n        <span class=\"kw\">return<\/span> num1 + num2;\r\n    }\r\n    \r\n    T subtract() {\r\n        <span class=\"kw\">return<\/span> num1 - num2;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    <span class=\"cm\">\/\/ Integer calculator<\/span>\r\n    Calculator&lt;<span class=\"kw\">int<\/span>&gt; intCalc(10, 5);\r\n    cout &lt;&lt; <span class=\"st\">\"Int Add: \"<\/span> &lt;&lt; intCalc.add() &lt;&lt; endl;\r\n    \r\n    <span class=\"cm\">\/\/ Float calculator<\/span>\r\n    Calculator&lt;<span class=\"kw\">float<\/span>&gt; floatCalc(5.5, 2.3);\r\n    cout &lt;&lt; <span class=\"st\">\"Float Add: \"<\/span> &lt;&lt; floatCalc.add() &lt;&lt; endl;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Class Template with Multiple Type Parameters<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">template<\/span> &lt;<span class=\"kw\">typename<\/span> T1, <span class=\"kw\">typename<\/span> T2&gt;\r\n<span class=\"kw\">class<\/span> Pair {\r\n<span class=\"kw\">private<\/span>:\r\n    T1 first;\r\n    T2 second;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Pair(T1 f, T2 s) : first(f), second(s) {}\r\n    \r\n    <span class=\"kw\">void<\/span> display() {\r\n        cout &lt;&lt; <span class=\"st\">\"First: \"<\/span> &lt;&lt; first &lt;&lt; <span class=\"st\">\", Second: \"<\/span> &lt;&lt; second &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Pair&lt;<span class=\"kw\">int<\/span>, string&gt; p1(1, <span class=\"st\">\"Ali\"<\/span>);\r\n    p1.display();  <span class=\"cm\">\/\/ First: 1, Second: Ali<\/span>\r\n    \r\n    Pair&lt;<span class=\"kw\">char<\/span>, <span class=\"kw\">double<\/span>&gt; p2('A', 3.14);\r\n    p2.display();  <span class=\"cm\">\/\/ First: A, Second: 3.14<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Class Template with Default Type<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">template<\/span> &lt;<span class=\"kw\">typename<\/span> T = <span class=\"kw\">int<\/span>&gt;  <span class=\"cm\">\/\/ Default type is int<\/span>\r\n<span class=\"kw\">class<\/span> Array {\r\n<span class=\"kw\">private<\/span>:\r\n    T arr[5];\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> insert(<span class=\"kw\">int<\/span> index, T value) {\r\n        arr[index] = value;\r\n    }\r\n    T get(<span class=\"kw\">int<\/span> index) {\r\n        <span class=\"kw\">return<\/span> arr[index];\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Array&lt;&gt; intArr;           <span class=\"cm\">\/\/ Uses default type (int)<\/span>\r\n    Array&lt;<span class=\"kw\">float<\/span>&gt; floatArr;   <span class=\"cm\">\/\/ Explicitly uses float<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Template Specialization<\/h3>\r\n        <p><strong>Template specialization<\/strong> allows you to define a different implementation for a specific data type.<\/p>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ General template<\/span>\r\n<span class=\"kw\">template<\/span> &lt;<span class=\"kw\">typename<\/span> T&gt;\r\n<span class=\"kw\">class<\/span> Storage {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> print(T value) {\r\n        cout &lt;&lt; <span class=\"st\">\"General: \"<\/span> &lt;&lt; value &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"cm\">\/\/ Specialized template for char*<\/span>\r\n<span class=\"kw\">template<\/span> &lt;&gt;\r\n<span class=\"kw\">class<\/span> Storage&lt;<span class=\"kw\">char<\/span>*&gt; {\r\n<span class=\"kw\">public<\/span>:\r\n    <span class=\"kw\">void<\/span> print(<span class=\"kw\">char<\/span>* value) {\r\n        cout &lt;&lt; <span class=\"st\">\"String: \"<\/span> &lt;&lt; value &lt;&lt; endl;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Storage&lt;<span class=\"kw\">int<\/span>&gt; intStore;\r\n    intStore.print(10);  <span class=\"cm\">\/\/ General: 10<\/span>\r\n    \r\n    Storage&lt;<span class=\"kw\">char<\/span>*&gt; stringStore;\r\n    stringStore.print(<span class=\"st\">\"Hello\"<\/span>);  <span class=\"cm\">\/\/ String: Hello<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Templates vs Macros<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Feature<\/th><th>Templates<\/th><th>Macros<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Type Safety<\/td><td>\u2713 Type-checked by compiler<\/td><td>\u2717 No type checking<\/td><\/tr>\r\n            <tr><td>Debugging<\/td><td>Easy to debug<\/td><td>Difficult to debug<\/td><\/tr>\r\n            <tr><td>Code Generation<\/td><td>Generates separate code for each type<\/td><td>Simple text replacement<\/td><\/tr>\r\n            <tr><td>Scope<\/td><td>Follows C++ scope rules<\/td><td>Global replacement<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a function template <code>swap()<\/code> that swaps two values of any type. Create a class template <code>Stack<\/code> that can store any data type with push(), pop(), and display() methods.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 14 -->\r\n    <div class=\"unit\" id=\"unit-14\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 14<\/span>\r\n        <h2>File Handling and Exception Handling in C++<\/h2>\r\n        <p>Reading\/writing files and handling errors gracefully using OOP approach.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>File Handling in C++ (OOP Approach)<\/h3>\r\n        <p>C++ provides three classes for file handling: <code>ifstream<\/code> (input), <code>ofstream<\/code> (output), and <code>fstream<\/code> (both). These are part of the <code>&lt;fstream&gt;<\/code> header.<\/p>\r\n\r\n        <h3>File Handling Classes<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Class<\/th><th>Purpose<\/th><th>Operations<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>ofstream<\/td><td>Write to files (output)<\/td><td>Creating and writing to files<\/td><\/tr>\r\n            <tr><td>ifstream<\/td><td>Read from files (input)<\/td><td>Reading from files<\/td><\/tr>\r\n            <tr><td>fstream<\/td><td>Both read and write<\/td><td>General file operations<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <h3>Writing to a File<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">#include<\/span> &lt;iostream&gt;\r\n<span class=\"kw\">#include<\/span> &lt;fstream&gt;\r\n<span class=\"kw\">using namespace<\/span> std;\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    <span class=\"cm\">\/\/ Create and open file for writing<\/span>\r\n    ofstream outFile(<span class=\"st\">\"student.txt\"<\/span>);\r\n    \r\n    <span class=\"cm\">\/\/ Check if file opened successfully<\/span>\r\n    <span class=\"kw\">if<\/span>(!outFile) {\r\n        cout &lt;&lt; <span class=\"st\">\"Error opening file!\\n\"<\/span>;\r\n        <span class=\"kw\">return<\/span> 1;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Write to file<\/span>\r\n    outFile &lt;&lt; <span class=\"st\">\"Name: Ali\\n\"<\/span>;\r\n    outFile &lt;&lt; <span class=\"st\">\"Roll No: 101\\n\"<\/span>;\r\n    outFile &lt;&lt; <span class=\"st\">\"GPA: 3.8\\n\"<\/span>;\r\n    \r\n    <span class=\"cm\">\/\/ Close file<\/span>\r\n    outFile.close();\r\n    \r\n    cout &lt;&lt; <span class=\"st\">\"File written successfully!\\n\"<\/span>;\r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Reading from a File<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">#include<\/span> &lt;iostream&gt;\r\n<span class=\"kw\">#include<\/span> &lt;fstream&gt;\r\n<span class=\"kw\">#include<\/span> &lt;string&gt;\r\n<span class=\"kw\">using namespace<\/span> std;\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    <span class=\"cm\">\/\/ Open file for reading<\/span>\r\n    ifstream inFile(<span class=\"st\">\"student.txt\"<\/span>);\r\n    \r\n    <span class=\"kw\">if<\/span>(!inFile) {\r\n        cout &lt;&lt; <span class=\"st\">\"Error opening file!\\n\"<\/span>;\r\n        <span class=\"kw\">return<\/span> 1;\r\n    }\r\n    \r\n    string line;\r\n    <span class=\"cm\">\/\/ Read line by line<\/span>\r\n    <span class=\"kw\">while<\/span>(getline(inFile, line)) {\r\n        cout &lt;&lt; line &lt;&lt; endl;\r\n    }\r\n    \r\n    inFile.close();\r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>File Handling with Objects<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> Student {\r\n<span class=\"kw\">private<\/span>:\r\n    string name;\r\n    <span class=\"kw\">int<\/span> rollNo;\r\n    <span class=\"kw\">float<\/span> gpa;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Student(string n = <span class=\"st\">\"\"<\/span>, <span class=\"kw\">int<\/span> r = 0, <span class=\"kw\">float<\/span> g = 0.0) \r\n        : name(n), rollNo(r), gpa(g) {}\r\n    \r\n    <span class=\"cm\">\/\/ Save to file<\/span>\r\n    <span class=\"kw\">void<\/span> saveToFile() {\r\n        ofstream file(<span class=\"st\">\"students.txt\"<\/span>, ios::app);  <span class=\"cm\">\/\/ append mode<\/span>\r\n        file &lt;&lt; name &lt;&lt; <span class=\"st\">\";\"<\/span> &lt;&lt; rollNo &lt;&lt; <span class=\"st\">\";\"<\/span> &lt;&lt; gpa &lt;&lt; endl;\r\n        file.close();\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Load from file<\/span>\r\n    <span class=\"kw\">void<\/span> loadFromFile() {\r\n        ifstream file(<span class=\"st\">\"students.txt\"<\/span>);\r\n        string line;\r\n        \r\n        <span class=\"kw\">while<\/span>(getline(file, line)) {\r\n            cout &lt;&lt; line &lt;&lt; endl;\r\n        }\r\n        file.close();\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    Student s1(<span class=\"st\">\"Ali\"<\/span>, 101, 3.8);\r\n    s1.saveToFile();\r\n    \r\n    Student s2;\r\n    s2.loadFromFile();\r\n}<\/pre><\/div>\r\n\r\n        <h3>Exception Handling in C++<\/h3>\r\n        <p><strong>Exception handling<\/strong> is a mechanism to handle runtime errors gracefully without crashing the program. C++ uses <code>try<\/code>, <code>catch<\/code>, and <code>throw<\/code> keywords.<\/p>\r\n\r\n        <h3>Exception Handling Syntax<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">try<\/span> {\r\n    <span class=\"cm\">\/\/ Code that might throw an exception<\/span>\r\n    <span class=\"kw\">throw<\/span> exception;\r\n}\r\n<span class=\"kw\">catch<\/span>(exception_type e) {\r\n    <span class=\"cm\">\/\/ Handle the exception<\/span>\r\n}<\/pre><\/div>\r\n\r\n        <h3>Simple Exception Handling Example<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">#include<\/span> &lt;iostream&gt;\r\n<span class=\"kw\">using namespace<\/span> std;\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    <span class=\"kw\">int<\/span> a = 10, b = 0;\r\n    \r\n    <span class=\"kw\">try<\/span> {\r\n        <span class=\"kw\">if<\/span>(b == 0) {\r\n            <span class=\"kw\">throw<\/span> <span class=\"st\">\"Division by zero error!\"<\/span>;\r\n        }\r\n        cout &lt;&lt; <span class=\"st\">\"Result: \"<\/span> &lt;&lt; a \/ b;\r\n    }\r\n    <span class=\"kw\">catch<\/span>(<span class=\"kw\">const char<\/span>* msg) {\r\n        cout &lt;&lt; <span class=\"st\">\"Exception caught: \"<\/span> &lt;&lt; msg &lt;&lt; endl;\r\n    }\r\n    \r\n    cout &lt;&lt; <span class=\"st\">\"Program continues...\\n\"<\/span>;\r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Multiple Catch Blocks<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">try<\/span> {\r\n    <span class=\"kw\">int<\/span> age;\r\n    cout &lt;&lt; <span class=\"st\">\"Enter age: \"<\/span>;\r\n    cin &gt;&gt; age;\r\n    \r\n    <span class=\"kw\">if<\/span>(age &lt; 0)\r\n        <span class=\"kw\">throw<\/span> -1;  <span class=\"cm\">\/\/ throw int<\/span>\r\n    <span class=\"kw\">else if<\/span>(age &gt; 150)\r\n        <span class=\"kw\">throw<\/span> 150.5;  <span class=\"cm\">\/\/ throw double<\/span>\r\n    <span class=\"kw\">else if<\/span>(age &lt; 18)\r\n        <span class=\"kw\">throw<\/span> <span class=\"st\">\"Minor\"<\/span>;  <span class=\"cm\">\/\/ throw string<\/span>\r\n    \r\n    cout &lt;&lt; <span class=\"st\">\"Age is valid\\n\"<\/span>;\r\n}\r\n<span class=\"kw\">catch<\/span>(<span class=\"kw\">int<\/span> e) {\r\n    cout &lt;&lt; <span class=\"st\">\"Error: Negative age\\n\"<\/span>;\r\n}\r\n<span class=\"kw\">catch<\/span>(<span class=\"kw\">double<\/span> e) {\r\n    cout &lt;&lt; <span class=\"st\">\"Error: Age too high\\n\"<\/span>;\r\n}\r\n<span class=\"kw\">catch<\/span>(<span class=\"kw\">const char<\/span>* msg) {\r\n    cout &lt;&lt; <span class=\"st\">\"Error: \"<\/span> &lt;&lt; msg &lt;&lt; endl;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Custom Exception Class<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">class<\/span> DivideByZeroException {\r\n<span class=\"kw\">private<\/span>:\r\n    string message;\r\n<span class=\"kw\">public<\/span>:\r\n    DivideByZeroException(string msg) : message(msg) {}\r\n    \r\n    string what() {\r\n        <span class=\"kw\">return<\/span> message;\r\n    }\r\n};\r\n\r\n<span class=\"kw\">int<\/span> divide(<span class=\"kw\">int<\/span> a, <span class=\"kw\">int<\/span> b) {\r\n    <span class=\"kw\">if<\/span>(b == 0) {\r\n        <span class=\"kw\">throw<\/span> DivideByZeroException(<span class=\"st\">\"Cannot divide by zero!\"<\/span>);\r\n    }\r\n    <span class=\"kw\">return<\/span> a \/ b;\r\n}\r\n\r\n<span class=\"kw\">int<\/span> main() {\r\n    <span class=\"kw\">try<\/span> {\r\n        cout &lt;&lt; divide(10, 0);\r\n    }\r\n    <span class=\"kw\">catch<\/span>(DivideByZeroException &amp;e) {\r\n        cout &lt;&lt; <span class=\"st\">\"Exception: \"<\/span> &lt;&lt; e.what() &lt;&lt; endl;\r\n    }\r\n}<\/pre><\/div>\r\n\r\n        <h3>Exception Handling Keywords<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Keyword<\/th><th>Purpose<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>try<\/td><td>Block of code that might throw an exception<\/td><\/tr>\r\n            <tr><td>throw<\/td><td>Throws an exception when error occurs<\/td><\/tr>\r\n            <tr><td>catch<\/td><td>Catches and handles the thrown exception<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Practice:<\/strong> Create a class <code>BankAccount<\/code> with methods for deposit and withdraw. Use exception handling to throw errors for: (1) Negative amount (2) Insufficient balance. Write a program that saves account details to a file.<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 UNIT 15 -->\r\n    <div class=\"unit\" id=\"unit-15\">\r\n      <div class=\"unit-header\">\r\n        <span class=\"unit-num-badge\">Unit 15<\/span>\r\n        <h2>Final Project \u2014 Student Management System<\/h2>\r\n        <p>Console-based OOP application combining all concepts learned.<\/p>\r\n      <\/div>\r\n      <div class=\"unit-body\">\r\n        <h3>Project Overview<\/h3>\r\n        <p>Build a <strong>Student Management System<\/strong> that demonstrates all OOP concepts: classes, objects, inheritance, polymorphism, encapsulation, file handling, and exception handling.<\/p>\r\n\r\n        <h3>Project Requirements<\/h3>\r\n        <ul>\r\n          <li><strong>Classes<\/strong>: Person (base), Student (derived), Teacher (derived)<\/li>\r\n          <li><strong>Features<\/strong>: Add, display, search, update, delete records<\/li>\r\n          <li><strong>File Handling<\/strong>: Save and load data from files<\/li>\r\n          <li><strong>Exception Handling<\/strong>: Handle invalid inputs gracefully<\/li>\r\n          <li><strong>Polymorphism<\/strong>: Use virtual functions for displayInfo()<\/li>\r\n          <li><strong>Encapsulation<\/strong>: Private data members with getters\/setters<\/li>\r\n          <li><strong>Menu-Driven<\/strong>: Interactive console menu<\/li>\r\n        <\/ul>\r\n\r\n        <h3>Project Structure<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"cm\">\/\/ Base class \u2014 Person<\/span>\r\n<span class=\"kw\">class<\/span> Person {\r\n<span class=\"kw\">protected<\/span>:\r\n    string name;\r\n    <span class=\"kw\">int<\/span> age;\r\n    string id;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Person(string n = <span class=\"st\">\"\"<\/span>, <span class=\"kw\">int<\/span> a = 0, string i = <span class=\"st\">\"\"<\/span>) \r\n        : name(n), age(a), id(i) {}\r\n    \r\n    <span class=\"kw\">virtual void<\/span> displayInfo() = 0;  <span class=\"cm\">\/\/ Pure virtual \u2014 abstract class<\/span>\r\n    <span class=\"kw\">virtual<\/span> ~Person() {}\r\n    \r\n    <span class=\"cm\">\/\/ Getters and setters<\/span>\r\n    string getName() { <span class=\"kw\">return<\/span> name; }\r\n    <span class=\"kw\">void<\/span> setName(string n) { name = n; }\r\n    \r\n    string getId() { <span class=\"kw\">return<\/span> id; }\r\n};\r\n\r\n<span class=\"cm\">\/\/ Derived class \u2014 Student<\/span>\r\n<span class=\"kw\">class<\/span> Student : <span class=\"kw\">public<\/span> Person {\r\n<span class=\"kw\">private<\/span>:\r\n    string department;\r\n    <span class=\"kw\">float<\/span> gpa;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Student(string n = <span class=\"st\">\"\"<\/span>, <span class=\"kw\">int<\/span> a = 0, string i = <span class=\"st\">\"\"<\/span>, \r\n            string dept = <span class=\"st\">\"\"<\/span>, <span class=\"kw\">float<\/span> g = 0.0)\r\n        : Person(n, a, i), department(dept), gpa(g) {}\r\n    \r\n    <span class=\"kw\">void<\/span> displayInfo() {\r\n        cout &lt;&lt; <span class=\"st\">\"\\n--- Student Info ---\\n\"<\/span>;\r\n        cout &lt;&lt; <span class=\"st\">\"ID: \"<\/span> &lt;&lt; id &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Name: \"<\/span> &lt;&lt; name &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Age: \"<\/span> &lt;&lt; age &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Department: \"<\/span> &lt;&lt; department &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"GPA: \"<\/span> &lt;&lt; gpa &lt;&lt; endl;\r\n    }\r\n    \r\n    <span class=\"cm\">\/\/ Save to file<\/span>\r\n    <span class=\"kw\">void<\/span> saveToFile() {\r\n        ofstream file(<span class=\"st\">\"students.txt\"<\/span>, ios::app);\r\n        file &lt;&lt; id &lt;&lt; <span class=\"st\">\",\"<\/span> &lt;&lt; name &lt;&lt; <span class=\"st\">\",\"<\/span> &lt;&lt; age &lt;&lt; <span class=\"st\">\",\"<\/span> \r\n             &lt;&lt; department &lt;&lt; <span class=\"st\">\",\"<\/span> &lt;&lt; gpa &lt;&lt; endl;\r\n        file.close();\r\n    }\r\n};\r\n\r\n<span class=\"cm\">\/\/ Derived class \u2014 Teacher<\/span>\r\n<span class=\"kw\">class<\/span> Teacher : <span class=\"kw\">public<\/span> Person {\r\n<span class=\"kw\">private<\/span>:\r\n    string subject;\r\n    <span class=\"kw\">int<\/span> experience;\r\n    \r\n<span class=\"kw\">public<\/span>:\r\n    Teacher(string n = <span class=\"st\">\"\"<\/span>, <span class=\"kw\">int<\/span> a = 0, string i = <span class=\"st\">\"\"<\/span>, \r\n            string sub = <span class=\"st\">\"\"<\/span>, <span class=\"kw\">int<\/span> exp = 0)\r\n        : Person(n, a, i), subject(sub), experience(exp) {}\r\n    \r\n    <span class=\"kw\">void<\/span> displayInfo() {\r\n        cout &lt;&lt; <span class=\"st\">\"\\n--- Teacher Info ---\\n\"<\/span>;\r\n        cout &lt;&lt; <span class=\"st\">\"ID: \"<\/span> &lt;&lt; id &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Name: \"<\/span> &lt;&lt; name &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Age: \"<\/span> &lt;&lt; age &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Subject: \"<\/span> &lt;&lt; subject &lt;&lt; endl;\r\n        cout &lt;&lt; <span class=\"st\">\"Experience: \"<\/span> &lt;&lt; experience &lt;&lt; <span class=\"st\">\" years\\n\"<\/span>;\r\n    }\r\n};<\/pre><\/div>\r\n\r\n        <h3>Main Program with Menu<\/h3>\r\n        <div class=\"code-block\"><pre><span class=\"kw\">int<\/span> main() {\r\n    <span class=\"kw\">int<\/span> choice;\r\n    \r\n    <span class=\"kw\">do<\/span> {\r\n        cout &lt;&lt; <span class=\"st\">\"\\n===== Student Management System =====\\n\"<\/span>;\r\n        cout &lt;&lt; <span class=\"st\">\"1. Add Student\\n\"<\/span>;\r\n        cout &lt;&lt; <span class=\"st\">\"2. Display All Students\\n\"<\/span>;\r\n        cout &lt;&lt; <span class=\"st\">\"3. Search Student\\n\"<\/span>;\r\n        cout &lt;&lt; <span class=\"st\">\"4. Delete Student\\n\"<\/span>;\r\n        cout &lt;&lt; <span class=\"st\">\"5. Exit\\n\"<\/span>;\r\n        cout &lt;&lt; <span class=\"st\">\"Enter choice: \"<\/span>;\r\n        cin &gt;&gt; choice;\r\n        \r\n        <span class=\"kw\">try<\/span> {\r\n            <span class=\"kw\">switch<\/span>(choice) {\r\n                <span class=\"kw\">case<\/span> 1: {\r\n                    string name, id, dept;\r\n                    <span class=\"kw\">int<\/span> age;\r\n                    <span class=\"kw\">float<\/span> gpa;\r\n                    \r\n                    cout &lt;&lt; <span class=\"st\">\"Enter ID: \"<\/span>;\r\n                    cin &gt;&gt; id;\r\n                    cout &lt;&lt; <span class=\"st\">\"Enter Name: \"<\/span>;\r\n                    cin.ignore();\r\n                    getline(cin, name);\r\n                    cout &lt;&lt; <span class=\"st\">\"Enter Age: \"<\/span>;\r\n                    cin &gt;&gt; age;\r\n                    cout &lt;&lt; <span class=\"st\">\"Enter Department: \"<\/span>;\r\n                    cin &gt;&gt; dept;\r\n                    cout &lt;&lt; <span class=\"st\">\"Enter GPA: \"<\/span>;\r\n                    cin &gt;&gt; gpa;\r\n                    \r\n                    <span class=\"kw\">if<\/span>(gpa &lt; 0 || gpa &gt; 4.0)\r\n                        <span class=\"kw\">throw<\/span> <span class=\"st\">\"Invalid GPA!\"<\/span>;\r\n                    \r\n                    Student s(name, age, id, dept, gpa);\r\n                    s.saveToFile();\r\n                    cout &lt;&lt; <span class=\"st\">\"Student added successfully!\\n\"<\/span>;\r\n                    <span class=\"kw\">break<\/span>;\r\n                }\r\n                \r\n                <span class=\"kw\">case<\/span> 2: {\r\n                    ifstream file(<span class=\"st\">\"students.txt\"<\/span>);\r\n                    string line;\r\n                    cout &lt;&lt; <span class=\"st\">\"\\n--- All Students ---\\n\"<\/span>;\r\n                    <span class=\"kw\">while<\/span>(getline(file, line)) {\r\n                        cout &lt;&lt; line &lt;&lt; endl;\r\n                    }\r\n                    file.close();\r\n                    <span class=\"kw\">break<\/span>;\r\n                }\r\n                \r\n                <span class=\"kw\">case<\/span> 5:\r\n                    cout &lt;&lt; <span class=\"st\">\"Thank you for using the system!\\n\"<\/span>;\r\n                    <span class=\"kw\">break<\/span>;\r\n                \r\n                <span class=\"kw\">default<\/span>:\r\n                    cout &lt;&lt; <span class=\"st\">\"Invalid choice!\\n\"<\/span>;\r\n            }\r\n        }\r\n        <span class=\"kw\">catch<\/span>(<span class=\"kw\">const char<\/span>* msg) {\r\n            cout &lt;&lt; <span class=\"st\">\"Error: \"<\/span> &lt;&lt; msg &lt;&lt; endl;\r\n        }\r\n        \r\n    } <span class=\"kw\">while<\/span>(choice != 5);\r\n    \r\n    <span class=\"kw\">return<\/span> 0;\r\n}<\/pre><\/div>\r\n\r\n        <h3>Project Enhancement Ideas<\/h3>\r\n        <ul>\r\n          <li>Add teacher management (similar to students)<\/li>\r\n          <li>Implement update and delete functionality<\/li>\r\n          <li>Add sorting (by name, GPA, etc.)<\/li>\r\n          <li>Use vectors or arrays to store multiple records in memory<\/li>\r\n          <li>Add password protection for admin access<\/li>\r\n          <li>Generate reports (e.g., students with GPA &gt; 3.5)<\/li>\r\n          <li>Implement operator overloading for comparison<\/li>\r\n          <li>Use templates for generic record management<\/li>\r\n        <\/ul>\r\n\r\n        <h3>Key OOP Concepts Used<\/h3>\r\n        <table class=\"data-table\">\r\n          <thead><tr><th>Concept<\/th><th>Used In<\/th><\/tr><\/thead>\r\n          <tbody>\r\n            <tr><td>Classes &amp; Objects<\/td><td>Person, Student, Teacher classes<\/td><\/tr>\r\n            <tr><td>Inheritance<\/td><td>Student and Teacher inherit from Person<\/td><\/tr>\r\n            <tr><td>Polymorphism<\/td><td>Virtual function displayInfo()<\/td><\/tr>\r\n            <tr><td>Encapsulation<\/td><td>Private data members with public methods<\/td><\/tr>\r\n            <tr><td>Abstract Class<\/td><td>Person class with pure virtual function<\/td><\/tr>\r\n            <tr><td>File Handling<\/td><td>Save and load student data<\/td><\/tr>\r\n            <tr><td>Exception Handling<\/td><td>Validate input and handle errors<\/td><\/tr>\r\n          <\/tbody>\r\n        <\/table>\r\n\r\n        <div class=\"practice\"><strong>\u270f\ufe0f Project Task:<\/strong> Complete the Student Management System with all features: Add, Display, Search, Update, Delete. Add Teacher management as well. Ensure proper use of OOP concepts, file handling, and exception handling. Test thoroughly!<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- CONGRATS SECTION -->\r\n    <div class=\"congrats\">\r\n      <h2>\ud83c\udf89 Congratulations!<\/h2>\r\n      <p>You've completed the Object-Oriented Programming in C++ course. Now practice by building real-world projects!<\/p>\r\n    <\/div>\r\n\r\n  <\/main>\r\n<\/div>\r\n\r\n<!-- BACK TO TOP BUTTON -->\r\n<button id=\"back-top\" aria-label=\"Back to top\">\u2191<\/button>\r\n\r\n<script>\r\n\/\/ Progress bar\r\nwindow.addEventListener('scroll', () => {\r\n  const winScroll = document.body.scrollTop || document.documentElement.scrollTop;\r\n  const height = document.documentElement.scrollHeight - document.documentElement.clientHeight;\r\n  const scrolled = (winScroll \/ height) * 100;\r\n  document.getElementById('progress').style.width = scrolled + '%';\r\n});\r\n\r\n\/\/ Back to top button\r\nconst backTop = document.getElementById('back-top');\r\nwindow.addEventListener('scroll', () => {\r\n  if (window.pageYOffset > 300) {\r\n    backTop.classList.add('visible');\r\n  } else {\r\n    backTop.classList.remove('visible');\r\n  }\r\n});\r\nbackTop.addEventListener('click', () => {\r\n  window.scrollTo({ top: 0, behavior: 'smooth' });\r\n});\r\n\r\n\/\/ Active TOC highlighting\r\nconst sections = document.querySelectorAll('.unit');\r\nconst navLinks = document.querySelectorAll('.toc-list a');\r\n\r\nwindow.addEventListener('scroll', () => {\r\n  let current = '';\r\n  sections.forEach(section => {\r\n    const sectionTop = section.offsetTop;\r\n    const sectionHeight = section.clientHeight;\r\n    if (pageYOffset >= sectionTop - 100) {\r\n      current = section.getAttribute('id');\r\n    }\r\n  });\r\n\r\n  navLinks.forEach(link => {\r\n    link.classList.remove('active');\r\n    if (link.getAttribute('href') === '#' + current) {\r\n      link.classList.add('active');\r\n    }\r\n  });\r\n});\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Object-Oriented Programming in C++ \u2013 University Level \u2013 Pak Notes Hub Pak Notes Hub Course Outline Start Learning Inheritance Polymorphism \ud83d\udcda University Level \u2014 BS CS \/ BS IT Object-Oriented Programmingin C++ Complete Notes Classes \u00b7 Objects \u00b7 Inheritance \u00b7 Polymorphism \u00b7 Templates \u2014 All in Easy English \ud83c\udfaf 15 Units \ud83c\udf93 University Level \ud83d\udcbb [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_angie_page":false,"footnotes":""},"class_list":["post-445","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/paknoteshub.online\/index.php?rest_route=\/wp\/v2\/pages\/445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/paknoteshub.online\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/paknoteshub.online\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/paknoteshub.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/paknoteshub.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=445"}],"version-history":[{"count":7,"href":"https:\/\/paknoteshub.online\/index.php?rest_route=\/wp\/v2\/pages\/445\/revisions"}],"predecessor-version":[{"id":452,"href":"https:\/\/paknoteshub.online\/index.php?rest_route=\/wp\/v2\/pages\/445\/revisions\/452"}],"wp:attachment":[{"href":"https:\/\/paknoteshub.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}