{"id":25762036,"url":"https://github.com/deryaxacar/42-cpp_03","last_synced_at":"2025-02-26T19:27:35.037Z","repository":{"id":279452838,"uuid":"861760344","full_name":"deryaxacar/42-Cpp_03","owner":"deryaxacar","description":"This project aims to teach you object-oriented programming principles by creating a class hierarchy in C++. It starts with a basic ClapTrap class and then adds derived classes such as ScavTrap, FragTrap, and DiamondTrap.","archived":false,"fork":false,"pushed_at":"2025-02-25T16:14:26.000Z","size":43,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-25T17:24:39.507Z","etag":null,"topics":["42","42-cpp","42-cpp-module","42-cpp-modules","42-school","42born2code","42cursus","42projects","42school","cpp","cpp-all","cpp-modules","cpp-modules-42","cpp-programming","cpp03","cpp98"],"latest_commit_sha":null,"homepage":"https://github.com/deryaxacar/42-Cpp_03","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deryaxacar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-23T13:21:47.000Z","updated_at":"2025-02-25T16:14:30.000Z","dependencies_parsed_at":"2025-02-25T17:24:43.589Z","dependency_job_id":"48ec6476-df36-4ecd-a304-035a1733076f","html_url":"https://github.com/deryaxacar/42-Cpp_03","commit_stats":null,"previous_names":["deryaxacar/42-cpp_03"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Cpp_03","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Cpp_03/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Cpp_03/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Cpp_03/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deryaxacar","download_url":"https://codeload.github.com/deryaxacar/42-Cpp_03/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240920201,"owners_count":19878749,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["42","42-cpp","42-cpp-module","42-cpp-modules","42-school","42born2code","42cursus","42projects","42school","cpp","cpp-all","cpp-modules","cpp-modules-42","cpp-programming","cpp03","cpp98"],"created_at":"2025-02-26T19:27:34.102Z","updated_at":"2025-02-26T19:27:35.028Z","avatar_url":"https://github.com/deryaxacar.png","language":"C++","readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eC++ Module 03\u003c/h1\u003e \u003cimg src=\"https://cdn-icons-png.flaticon.com/512/6132/6132222.png\" alt=\"C++ Logo\" width=\"65\"\u003e\u003c/br\u003e\u003c/br\u003e\n\n\u003c/div\u003e\n\u003cp align=\"center\" \u003e\n    Bu proje, nesne yönelimli programlama (OOP) prensiplerini kullanarak temel bir oyun karakteri simülasyonu gerçekleştirmektedir. \n  `ClapTrap`, `ScavTrap` ve `FragTrap` sınıfları, karakterlerin özelliklerini ve yeteneklerini modellemek amacıyla \n  miras alma (inheritance) özelliğinden faydalanmaktadır. Her bir sınıf, kendine özgü özellikler ve metotlar içerirken, \n  üst sınıfın (ClapTrap) temel işlevselliğinden yararlanmaktadır. \n  \u003c/p\u003e\n\n\n### İçindekiler 📚\n- [Ex00 - Aaaaand... OPEN!](#ex00---aaaaand-open)\n- [Ex01 - Serena, my love!](#ex01---serena-my-love)\n- [Ex02 - Repetitive work](#ex02---repetitive-work)\n- [Miras Alma (inheritance) Nedir?](#miras-alma-inheritance-nedir)\n\n---\n\n\u003ca name=\"ex00---aaaaand-open\"\u003e\u003c/a\u003e\n## Ex00 - Aaaaand... OPEN!\n\n**Gereksinimler**\n1. **ClapTrap Sınıfı**:\n   - **Özel Değişkenler**:\n     - `Name` (parametre olarak alınacak)\n     - `Hit points` (10)\n     - `Energy points` (10)\n     - `Attack damage` (0)\n    - **kod**\n    - ```cpp\n      private:\n            std::string name;\n            int hitPoint;\n            int energyPoint;\n            int attackDamage;\n      ```\n      \n    - Constructor ile başlangıç değerlerinin ayarlanması:\n    - ```cpp\n      ClapTrap::ClapTrap(std::string name) : name(name), hitPoint(10), energyPoint(10),attackDamage(0)\n      {\n        std::cout \u003c\u003c this-\u003egetName() \u003c\u003c\": Constructor call\" \u003c\u003c std::endl;\n      }\n        ```\n\n2. **Public Üye Fonksiyonları**:\n   - `void attack(const std::string\u0026 target);`\n     - Hedefe saldırı yapar, hasar verir. Enerji puanı 1 azalır.\n     - ```cpp\n        void ClapTrap::attack(const std::string\u0026 target)\n        {\n            // Eğer ClapTrap'in hitPoint veya energyPoint'i 0 veya daha düşükse\n            if(this-\u003ehitPoint \u003c= 0 || this-\u003eenergyPoint \u003c= 0)\n            {\n                std::cout \u003c\u003c \"I cannot do anything\" \u003c\u003c std::endl; // Yapamayacağını belirt\n                return; // Fonksiyondan çık\n            }\n            \n            // Enerji puanı varsa saldırı yap\n            if(this-\u003eenergyPoint \u003e 0)\n            {\n                std::cout \u003c\u003c this-\u003ename \u003c\u003c \" attacks \" \u003c\u003c target \u003c\u003c \" causing \" \u003c\u003c this-\u003eattackDamage \u003c\u003c \" damage!\\n\"; \n                this-\u003eenergyPoint -= 1; // Enerji puanını azalt\n            }\n        }\n         ```\n   - `void takeDamage(unsigned int amount);`\n     - Belirtilen miktarda hasar alır.\n     - ```cpp\n        void ClapTrap::takeDamage(unsigned int amount)\n        {\n            // Mevcut hit point'leri göster\n            std::cout \u003c\u003c this-\u003ename \u003c\u003c \" Hit points: \" \u003c\u003c this-\u003ehitPoint \u003c\u003c \" points\\n\";\n            \n            // Eğer hit point'ler 0 veya daha düşükse, fonksiyondan çık\n            if(this-\u003ehitPoint \u003c= 0)\n                return;\n            \n            // Eğer hasar miktarı 0'dan büyükse\n            if(int(amount) \u003e 0)\n            {\n                std::cout \u003c\u003c this-\u003ename \u003c\u003c \" has taken \" \u003c\u003c (int)amount \u003c\u003c \" damage!\" \u003c\u003c std::endl; // Hasar mesajı yazdır\n                this-\u003ehitPoint -= (int)amount; // Hit point'leri azalt\n            }\n        \n            // Eğer hit point'ler 0 veya daha düşükse, ölüm mesajı yazdır\n            if(this-\u003ehitPoint \u003c= 0)\n            {\n                std::cout \u003c\u003c this-\u003ename \u003c\u003c \" dies..\\n\";\n            }\n        }\n        ```\n   - `void beRepaired(unsigned int amount);`\n     - Belirtilen miktarda can yeniler. Enerji puanı 1 azalır.\n     - ```cpp\n        void ClapTrap::beRepaired(unsigned int amount)\n        {\n            // Mevcut hit point'leri göster\n            std::cout \u003c\u003c this-\u003ename \u003c\u003c \" Hit points: \" \u003c\u003c this-\u003ehitPoint \u003c\u003c \" points\\n\";\n            \n            // Eğer hit point'ler veya enerji puanları 0 veya daha düşükse, fonksiyondan çık\n            if(this-\u003ehitPoint \u003c= 0 || this-\u003eenergyPoint \u003c= 0)\n            {\n                std::cout \u003c\u003c \"I cannot do anything\" \u003c\u003c std::endl; // Yapamayacağını belirt\n                return;\n            }\n            \n            // Eğer enerji puanı varsa ve onarıma uygun bir miktar belirtilmişse\n            if(this-\u003eenergyPoint \u003e 0 \u0026\u0026 (int)amount \u003e= 0)\n            {\n                std::cout \u003c\u003c this-\u003ename \u003c\u003c \" healed \" \u003c\u003c amount \u003c\u003c \" points\\n\"; // Onarım mesajı yazdır\n                this-\u003ehitPoint += (int)amount; // Hit point'leri artır\n                this-\u003eenergyPoint -= 1; // Enerji puanını azalt\n            }\n        \n            // Yeni hit point'leri göster\n            std::cout \u003c\u003c this-\u003ename \u003c\u003c \" New Hit points: \" \u003c\u003c this-\u003ehitPoint \u003c\u003c \" points\\n\";\n        }\n        ```\n\n3. **Mesajlar**:\n   - Her fonksiyon çağrıldığında, durumu belirten bir mesaj yazdırmalıdır.\n   - Yapıcı ve yıkıcı fonksiyonlar için de mesaj gösterilmelidir.\n---\n\n\u003ca name=\"ex01---serena-my-love\"\u003e\u003c/a\u003e\n## Ex01 - Serena, my love!\n\n**Gereksinimler**\n1. **ScavTrap Sınıfı**:\n   - **ClapTrap Sınıfından Türetilecektir**:\n     - Yapıcı ve yıkıcı fonksiyonları ClapTrap'tan miras alacak.\n     - **kod**\n     - ```cpp\n        ScavTrap::ScavTrap(std::string name) : ClapTrap(name)\n        {\n            // Hit points, energy points ve attack damage değerlerini ayarla\n            this-\u003esetVar(name, 100, 50, 20);\n            \n            // ScavTrap yapıcısının çağrıldığını belirt\n            std::cout \u003c\u003c this-\u003egetName() \u003c\u003c \": ScavTrap Constructor call\\n\";\n        }\n       ```\n       - Not : `ScavTrap` sınıfı `ClapTrap` sınıfından miras aldığı için, kendi değerlerini `setVar(name, 100, 50, 20);` gibi bir fonksiyon kullanarak atar\n   - Saldırı (`attack()`) fonksiyonu farklı bir mesaj yazdıracak.\n     - ```cpp\n        std::cout \u003c\u003c \"ScavTrap \" \u003c\u003c this-\u003ename \u003c\u003c \" attacks \" \u003c\u003c target \u003c\u003c \", causing \" \u003c\u003c this-\u003eattackDamage \u003c\u003c \" points of damage!\" \u003c\u003c std::endl;\n       ```\n\n2. **Yeni Üye Fonksiyonu**:\n   - `void guardGate();`\n     - Bu fonksiyon, ScavTrap'ın Gate Keeper moduna geçtiğini belirten bir mesaj yazdıracak.\n     - ```cpp\n        void ScavTrap::guardGate()\n        {\n            std::cout \u003c\u003c getName() \u003c\u003c \" ScavTrap is now in Gatekeeper mode.\\n\";\n        }\n       ```\n\n3. **Yapıcı ve Yıkıcı İşlemleri**:\n   - `ScavTrap` oluşturulurken, önce `ClapTrap` oluşturulmalıdır. Tersine yok etme sırası korunmalıdır.\n\n---\n\n\u003ca name=\"ex02---repetitive-work\"\u003e\u003c/a\u003e\n## Ex02 - Repetitive work\n\n**Gereksinimler**\n1. **FragTrap Sınıfı**:\n   - **ClapTrap Sınıfından Türetilecektir**:\n     - Kendi yapıcı ve yıkıcı fonksiyonları olacak. Yapıcı, `ClapTrap`'ın yapıcısını çağıracak ve farklı bir mesaj yazdıracak.\n     - ```cpp\n        FragTrap::FragTrap(std::string name) : ClapTrap(name)\n        {\n            this-\u003esetVar(name,100,100,30);\n            std::cout \u003c\u003c this-\u003egetName() \u003c\u003c \": FragTrap Constructor call\\n\";\n        }\n        ```\n\n2. **Değişkenler**:\n   - `Name` (parametre olarak alınacak)\n   - `Hit points` (100)\n   - `Energy points` (100)\n   - `Attack damage` (30)\n   - ```cpp\n        FragTrap::FragTrap(std::string name) : ClapTrap(name)\n        {\n            this-\u003esetVar(name,100,100,30);\n            std::cout \u003c\u003c this-\u003egetName() \u003c\u003c \": FragTrap Constructor call\\n\";\n        }\n        ```\n\n3. **Yeni Üye Fonksiyonu**:\n   - `void highFivesGuys(void);`\n     - Bu fonksiyon, pozitif bir \"high five\" isteği yazdıracak.\n     - ```cpp\n        void FragTrap::highFivesGuys(void)\n        {\n            // Eğer hit point'ler 0 veya daha düşükse, fonksiyondan çık\n            if(this-\u003egetHitPoint() \u003c= 0)\n                return;\n        \n            // FragTrap'ın high five isteğini yazdır\n            std::cout \u003c\u003c this-\u003egetName() \u003c\u003c \": GIVE ME A FIVER, MAN!\\n\";\n        }\n        ```\n\n4. **Yapıcı ve Yıkıcı İşlemleri**:\n   - `FragTrap` oluşturulurken, önce `ClapTrap` oluşturulmalı ve ardından `FragTrap` yapıcısı kendi değerlerini ayarlamalıdır. Tersine yok etme sırası korunmalıdır.\n\n---\n\n\u003ca name=\"miras-alma-inheritance-nedir\"\u003e\u003c/a\u003e\n## Miras Alma (inheritance) Nedir?\n\nMiras alma (inheritance), nesne yönelimli programlamada (OOP) kullanılan bir kavramdır. Bir sınıfın (üst sınıf) özelliklerinin (değişkenler ve metotlar) başka bir sınıf (alt sınıf) tarafından devralınması anlamına gelir. Bu, kodun yeniden kullanılabilirliğini artırır ve daha temiz, düzenli bir yapı sağlar.\n\n### Temel Kavramlar\n\n- **Üst Sınıf (Base Class)**: Diğer sınıflar tarafından kullanılabilecek genel özellikler ve metotlar içerir. Örneğin, `ClapTrap` sınıfı.\n\n- **Alt Sınıf (Derived Class)**: Üst sınıftan miras alan sınıf. Üst sınıfın özelliklerini devralır ve kendi özel özelliklerini ekleyebilir. Örneğin, `ScavTrap` ve `FragTrap`.\n\n### Miras Alma Türleri\n\n- **Tek Miras**: Bir alt sınıf yalnızca bir üst sınıftan miras alır.\n- **Çoklu Miras**: Bir alt sınıf birden fazla üst sınıftan miras alabilir.\n- **Hiyerarşik Miras**: Bir üst sınıf birden fazla alt sınıfa sahiptir.\n\n### Neden Kullanılır?\n\n- **Kod Yeniden Kullanımı**: Ortak özellikler ve metotlar bir üst sınıfta tanımlanarak alt sınıflarda tekrar yazılmasına gerek kalmaz.\n- **Daha İyi Organizasyon**: İlgili sınıflar arasında hiyerarşi oluşturarak kodun düzenli ve okunabilir olmasını sağlar.\n- **Polimorfizm**: Alt sınıfların, üst sınıfın metotlarını özelleştirerek farklı davranışlar sergilemesine olanak tanır.\n\n**Örnek**\n```cpp\n    class ClapTrap {\n    public:\n        void attack();\n    };\n    \n    class ScavTrap : public ClapTrap {\n    public:\n        void guardGate();\n    };\n  ```\n\nYukarıdaki örnekte ScavTrap, ClapTrap sınıfından miras alır ve attack() metodunu devralır, ayrıca kendi özel metodunu tanımlar.\n\n---\n\n\u003cp align=\"center\"\u003e2025 This project was created by Derya ACAR.\u003c/p\u003e\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderyaxacar%2F42-cpp_03","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fderyaxacar%2F42-cpp_03","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderyaxacar%2F42-cpp_03/lists"}