{"id":25948803,"url":"https://github.com/deryaxacar/42-cpp_04","last_synced_at":"2025-03-04T11:22:48.200Z","repository":{"id":258266674,"uuid":"868864612","full_name":"deryaxacar/42-Cpp_04","owner":"deryaxacar","description":" This repo covers key concepts in object-oriented programming in C++. It includes explanations of virtual functions, abstract classes, interfaces, and copy methods, all illustrated with examples. The focus is on dynamic polymorphism and practical applications of these concepts.","archived":false,"fork":false,"pushed_at":"2025-02-21T17:57:18.000Z","size":107,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-21T18:34:35.520Z","etag":null,"topics":["42","42-cpp","42-cpp-module","42-cpp-modules","42born2code","42cursus","42projects","42school","c-plus-plus","cpp","cpp-all","cpp-library","cpp-programming","cpp-programming-language","cppmodules"],"latest_commit_sha":null,"homepage":"https://github.com/deryaxacar/42-Cpp_04","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-10-07T10:15:20.000Z","updated_at":"2025-02-21T17:57:22.000Z","dependencies_parsed_at":"2024-10-18T07:47:27.890Z","dependency_job_id":"53fd4f39-1737-48a3-8dcb-d59bc9b19b05","html_url":"https://github.com/deryaxacar/42-Cpp_04","commit_stats":null,"previous_names":["deryaxacar/42-cpp_04"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Cpp_04","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Cpp_04/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Cpp_04/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Cpp_04/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deryaxacar","download_url":"https://codeload.github.com/deryaxacar/42-Cpp_04/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241837146,"owners_count":20028317,"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","42born2code","42cursus","42projects","42school","c-plus-plus","cpp","cpp-all","cpp-library","cpp-programming","cpp-programming-language","cppmodules"],"created_at":"2025-03-04T11:22:47.497Z","updated_at":"2025-03-04T11:22:48.193Z","avatar_url":"https://github.com/deryaxacar.png","language":"C++","readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eC++ Module 04\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\nC++ dilinde nesne yönelimli programlamanın temel kavramlarını kapsamaktadır. İçerisinde sanal fonksiyonlar, soyut sınıflar, polimorfizm, kopyalama yöntemleri (yüzeysel ve derin kopya) ve arayüzler gibi konular yer almaktadır. Her bölümde açıklayıcı örnekler ile kavramların nasıl çalıştığı gösterilmektedir. Bu rehber, C++ programlama becerilerinizi geliştirmenize yardımcı olacaktır.\n\u003c/p\u003e\n\n\n### İçindekiler 📚\n- [Virtual (Sanal Fonksiyonlar)](#virtual-sanal-fonksiyonlar)\n- [Abstract Class (Soyut Sınıflar)](#abstract-class-soyut-sınıflar)\n- [Virtual ve Subtype Polymorphism (Sanal ve Alt Tür Polymorphism)](#virtual-ve-subtype-polymorphism-sanal-ve-alt-tür-polymorphism)\n- [Function Override (Fonksiyon Geçersiz Kılma)](#function-override-fonksiyon-geçersiz-kılma)\n- [Shallow Copy ve Deep Copy](#shallow-copy-ve-deep-copy)\n- [Interfaces (Arayüzler)](#interfaces-arayüzler)\n\n---\n\n\u003ca name=\"virtual-sanal-fonksiyonlar\"\u003e\u003c/a\u003e\n## Virtual (Sanal Fonksiyonlar)\n\nVirtual, C++ dilinde sanal fonksiyonlar oluşturmak için kullanılan bir anahtar kelimedir. Sanal fonksiyonlar, üst sınıf türündeki bir nesnenin alt sınıflarının fonksiyonlarını dinamik olarak çağırabilmesini sağlar. Bu sayede, aynı üst sınıftan türetilmiş nesneler farklı davranışlar sergileyebilir.\n\n**örnek:**\n\n```cpp\n#include \u003ciostream\u003e\nusing namespace std;\n\nclass Animal {\npublic:\n    virtual void makeSound() {\n        cout \u003c\u003c \"The Animal Sound\" \u003c\u003c endl;\n    }\n};\n\nclass Dog : public Animal {\npublic:\n    void makeSound() override {\n        cout \u003c\u003c \"Barks!\" \u003c\u003c endl;\n    }\n};\n\nclass Cat : public Animal {\npublic:\n    void makeSound() override {\n        cout \u003c\u003c \"Meows!\" \u003c\u003c endl;\n    }\n};\n\nint main() {\n    Animal* a1 = new Dog();\n    Animal* a2 = new Cat();\n\n    a1-\u003emakeSound();  // Barks!\n    a2-\u003emakeSound();  // Meows!\n\n    delete a1;\n    delete a2;\n\n    return 0;\n}\n```\n\n---\n\n\u003ca name=\"abstract-class-soyut-sınıflar\"\u003e\u003c/a\u003e\n## Abstract Class (Soyut Sınıflar) \n\nSoyut sınıflar, en az bir saf sanal fonksiyon içeren ve doğrudan nesne oluşturulamayan sınıflardır. Bu sınıflar, belirli bir arayüz sunar ve alt sınıfların bu arayüzü uygulamasını zorunlu kılar.\n\n**örnek:**\n\n```cpp\nclass Hayvan {\npublic:\n    virtual void beslen() = 0; // Saf sanal fonksiyon\n    virtual void hareketEt() = 0;\n};\n\nclass Kedi : public Hayvan {\npublic:\n    void beslen() override {\n        cout \u003c\u003c \"Kedi, balık yiyerek beslenir.\" \u003c\u003c endl;\n    }\n    void hareketEt() override {\n        cout \u003c\u003c \"Kedi, dört ayak üzerinde hareket eder.\" \u003c\u003c endl;\n    }\n};\n```\n\n---\n\n\u003ca name=\"virtual-ve-subtype-polymorphism-sanal-ve-alt-tür-polymorphism\"\u003e\u003c/a\u003e\n## Virtual ve Subtype Polymorphism (Sanal ve Alt Tür Polymorphism)\n\nSanal fonksiyonlar, alt tür polymorphism'i sağlayarak üst sınıf türündeki bir nesnenin alt sınıf türündeki bir nesneye dinamik olarak dönüştürülmesini mümkün kılar. Bu sayede, belirli bir nesne türüne göre uygun alt sınıf fonksiyonları çağrılabilir.\n\n\u003ca name=\"shallow-copy-ve-deep-copy\"\u003e\u003c/a\u003e\n### Shallow Copy ve Deep Copy\n\n- **Shallow Copy (Yüzeysel Kopya):** Mevcut nesnenin bellek alanının bir kopyasını oluşturur, ancak referans türündeki verileri doğrudan kopyalar. Bu nedenle, iki nesne birbirini etkileyebilir.\n- **Deep Copy (Derin Kopya):** Mevcut nesnenin tamamen bağımsız bir kopyasını oluşturur. Bellek alanı ve veriler ayrı ayrı kopyalanır; bu nedenle değişiklikler birbirini etkilemez.\n\n---\n\n\u003cdiv align= \"center\"\u003e\n  \u003cimg src=\"https://i.hizliresim.com/74delye.PNG?_gl=1*10iwxpq*_ga*MTA0MDAwNjI5OC4xNzI4NzQ2ODgz*_ga_M9ZRXYS2YN*MTcyODc0Njg4Mi4xLjEuMTcyODc0NzEyMi40OS4wLjA.\" alt=\"img\" width=\"670\" height=\"350\"\u003e\n\u003c/div\u003e\n\n---\n\n**örnek kod**\n\n```cpp\n#include \u003ciostream\u003e\n#include \u003cstring\u003e\nusing namespace std;\n\nclass Elbise {\nprivate:\n    string renk;\n\npublic:\n    Elbise(const string \u0026renk) : renk(renk) {}\n\n    string getRenk() const {\n        return renk;\n    }\n\n    void setRenk(const string \u0026yeniRenk) {\n        renk = yeniRenk;\n    }\n};\n\nint main() {\n    // Shallow Copy\n    Elbise elbise1(\"Mavi\");\n    Elbise elbise2 = elbise1; // Yüzeysel kopya\n\n    elbise2.setRenk(\"Sarı\");\n    cout \u003c\u003c \"Elbise 1 Rengi: \" \u003c\u003c elbise1.getRenk() \u003c\u003c endl; // Sarı - Etkilendi\n\n    // Deep Copy\n    Elbise elbise3(\"Kırmızı\");\n    Elbise elbise4 = Elbise(elbise3.getRenk()); // Derin kopya\n\n    elbise3.setRenk(\"Yeşil\");\n    cout \u003c\u003c \"Elbise 4 Rengi: \" \u003c\u003c elbise4.getRenk() \u003c\u003c endl; // Kırmızı - Etkilenmedi\n\n    return 0;\n}\n```\n\n---\n\u003ca name=\"function-override-fonksiyon-geçersiz-kılma\"\u003e\u003c/a\u003e\n## Function Override (Fonksiyon Geçersiz Kılma)\n\nC++ dilinde \"function override\" (fonksiyon geçersiz kılma), bir alt sınıfın üst sınıfta tanımlanan sanal bir fonksiyonu yeniden tanımlaması anlamına gelir. Bu, polimorfizm ve nesne yönelimli programlama için temel bir özelliktir.\n\n**Temel Kurallar**\n- **Sanal Fonksiyon:** Geçersiz kılınacak fonksiyon, üst sınıfta virtual anahtar kelimesi ile tanımlanmalıdır.\n- **Aynı İmza:** Alt sınıfta tanımlanan fonksiyonun, üst sınıftaki ile aynı isim, dönüş tipi ve parametre listesine sahip olması gerekir.\n- **override Anahtar Kelimesi:** C++11 ile birlikte override anahtar kelimesi kullanarak, fonksiyonun gerçekten geçersiz kılınıp kılınmadığını belirtmek iyi bir uygulamadır.\n\n---\n\n\u003ca name=\"interfaces-arayüzler\"\u003e\u003c/a\u003e\n## Interfaces (Arayüzler)\n\nArayüzler, yalnızca saf sanal fonksiyonlar içeren sınıflardır. Bir arayüz, belirli bir işlevi tanımlar ve bu işlevi uygulayan sınıfların tüm fonksiyonları tanımlaması zorunludur.\n\n**örnek**\n\n```cpp\nclass Printer {\npublic:\n    virtual void print() const = 0; // Saf sanal fonksiyon\n};\n```\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_04","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fderyaxacar%2F42-cpp_04","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderyaxacar%2F42-cpp_04/lists"}