{"id":22218317,"url":"https://github.com/coders-school/meetup_modern_cpp","last_synced_at":"2025-07-27T14:32:36.964Z","repository":{"id":36447203,"uuid":"161344933","full_name":"coders-school/meetup_modern_cpp","owner":"coders-school","description":null,"archived":false,"fork":false,"pushed_at":"2022-06-23T18:18:12.000Z","size":46,"stargazers_count":2,"open_issues_count":0,"forks_count":9,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-04T03:04:02.759Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coders-school.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-12-11T14:19:08.000Z","updated_at":"2022-06-23T18:18:16.000Z","dependencies_parsed_at":"2022-07-29T21:10:04.199Z","dependency_job_id":null,"html_url":"https://github.com/coders-school/meetup_modern_cpp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/coders-school/meetup_modern_cpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coders-school%2Fmeetup_modern_cpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coders-school%2Fmeetup_modern_cpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coders-school%2Fmeetup_modern_cpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coders-school%2Fmeetup_modern_cpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coders-school","download_url":"https://codeload.github.com/coders-school/meetup_modern_cpp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coders-school%2Fmeetup_modern_cpp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267370624,"owners_count":24076461,"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","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-12-02T22:20:15.912Z","updated_at":"2025-07-27T14:32:36.674Z","avatar_url":"https://github.com/coders-school.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meetup Nowoczesny C++ - Welcome!\n![Coders School](http://coders.school/wp-content/uploads/2018/10/LOGO_bez_tla.png)\n\n[![Build Status](https://travis-ci.org/coders-school/meetup_modern_cpp.svg?branch=master)](https://travis-ci.org/coders-school/meetup_modern_cpp)\n\n[Wersja online w serwisie Tech.io](https://tech.io/playgrounds/37891/meetup-nowoczesny-c)\n\nPoniżej jest kod napisany w starym C++03. Reprezentuje on prostą hierarchię figur geometrycznych. Klasa bazowa `Shape` definiuje interfejs z 3 publicznymi metodami: `getArea()`, `getPerimeter()` i `print()`. Po `Shape` dziedziczy klasa `Rectangle` reprezentująca prostokąt, a po niej dziedziczy klasa `Square` reprezentująca kwadrat. Klasy te odpowienio implementują wspomniane metody. W funkcji `main()` jest użycie figur, które są przechowywane w kolekcji. Twoim zadaniem jest unowocześnienie tego kodu, korzystając z możliwości jakie daje C++11 i C++14.\n\nJeśli ściągniesz kod lokalnie, to dodatkowo możesz sprawdzać postęp za pomocą dodanych skryptów sprawdzających. [Repozytorium do ściągnięcia na GitHubie](https://github.com/coders-school/meetup_modern_cpp)\n\nPotrzebne programy: make, g++\n\n### Użycie:\n\u003e make\n\n## Zadania:\n1. `nullptr`:\n    Zamień wszystkie NULLe na `nullptr`\n1. `using` alias:\n    Zamień typedef na alias using\n1. automatic type deduction:\n    Użyj `auto`, tam gdzie można go użyć\n1. range based for loop:\n    Użyj pętli for po kolekcji tam, gdzie to możliwe\n1. `default`:\n    Oznacz konstruktory kopiujące jako `default`.\n1. `delete`:\n    Usuń metodę `getY()` z klasy `Square`.\n    Usuń domyślne konstruktory (te bez parametrów).\n1. `final`:\n    Oznacz klasę `Square` jako `final` oraz oznacz metodę `getX()` w klasie `Rectangle` jako `final`\n1. `override`:\n    Oznacz wszystkie wirtualne metody jako `override`. Czy zauważasz jakiś problem?\n\n## Zadania dodatkowe:\n1. uniform initialization:\n    Użyj jednolitej inicjalizacji do zainicjalizowania kolekcji `shapes`.\n1. smart pointers:\n    Zamień zwykłe wskażniki na `shared_ptr`\n1. lambda functions:\n    Zamień funkcję `sortByArea()` na funkcję lambda\n\n```C++ runnable\n#include \u003ciostream\u003e\n#include \u003cvector\u003e\n#include \u003calgorithm\u003e\nusing namespace std;\n\nclass Shape\n{\npublic:\n    virtual ~Shape() {}\n\n    virtual double getArea() const = 0;\n    virtual double getPerimeter() const = 0;\n    virtual void print() const { cout \u003c\u003c \"Unknown Shape\" \u003c\u003c endl; }\n};\n\nclass Rectangle : public Shape\n{\npublic:\n    Rectangle(double x, double y) : x_(x), y_(y) {}\n    Rectangle(const Rectangle \u0026 other) { x_ = other.getX(); y_ = other.getY(); }\n\n    double getArea() const { return x_ * y_; }\n    double getPerimeter() const { return 2 * (x_ + y_); }\n    double getX() const { return x_; }\n    double getY() const { return y_; }\n    void print() const {\n    \tcout \u003c\u003c \"Rectangle: x: \" \u003c\u003c getX() \u003c\u003c endl\n             \u003c\u003c \"           y: \" \u003c\u003c getY() \u003c\u003c endl\n             \u003c\u003c \"        area: \" \u003c\u003c getArea() \u003c\u003c endl\n             \u003c\u003c \"   perimeter: \" \u003c\u003c getPerimeter() \u003c\u003c endl;\n\t}\n\nprivate:\n    Rectangle();\n\n    double x_;\n    double y_;\n};\n\nclass Square : public Rectangle\n{\npublic:\n    Square(double x) : Rectangle(x, x) {}\n    Square(const Square \u0026 other) : Rectangle(other.getX(), other.getX()) {}\n\n    double getArea() { return getX() * getX(); }\n    double getPerimeter() { return 4 * getX(); }\n    void print() {\n    \tcout \u003c\u003c \"Square:    x: \" \u003c\u003c getX() \u003c\u003c endl\n             \u003c\u003c \"        area: \" \u003c\u003c getArea() \u003c\u003c endl\n             \u003c\u003c \"   perimeter: \" \u003c\u003c getPerimeter() \u003c\u003c endl;\n\t}\n\nprivate:\n    double getY(); // should not have Y dimension\n    Square();\n};\n\nbool sortByArea(Shape* first, Shape* second)\n{\n    if(first == NULL || second == NULL)\n    {\n        return false;\n    }\n    return (first-\u003egetArea() \u003c second-\u003egetArea());\n}\n\ntypedef vector\u003cShape*\u003e Collection;\n\nvoid printCollectionElements(const Collection\u0026 collection)\n{\n    for(Collection::const_iterator it = collection.begin(); it != collection.end(); ++it)\n        if(*it != NULL)\n            (*it)-\u003eprint();\n}\n\nvoid printAreas(const Collection\u0026 collection)\n{\n    for(Collection::const_iterator it = collection.begin(); it != collection.end(); ++it)\n        if(*it != NULL)\n            cout \u003c\u003c (*it)-\u003egetArea() \u003c\u003c endl;\n}\n\nint main() {\n\tCollection shapes;\n    shapes.push_back(new Rectangle(4.0, 2.0));\n    shapes.push_back(new Rectangle(10.0, 5.0));\n    shapes.push_back(new Square(3.0));\n    shapes.push_back(new Square(4.0));\n    \n    printCollectionElements(shapes);\n    \n    cout \u003c\u003c \"Areas before sort: \" \u003c\u003c endl;\n    printAreas(shapes);\n    sort(shapes.begin(), shapes.end(), sortByArea);\n    cout \u003c\u003c \"Areas after sort: \" \u003c\u003c endl;\n    printAreas(shapes);\n    \n\treturn 0;\n}\n```\n\n## Co dalej?\n\n1. Porównaj swoje rozwiązania z naszymi na [GitHubie](https://github.com/coders-school/meetup_modern_cpp/tree/solutions)\n1. Polub [Coders School na Facebooku](https://www.facebook.com/szkola.coders.school)\n1. Zapisz się na [newsletter](http://coders.school/?elementor_library=formularz-mailingowy), aby pobrać dzisiejszą prezentację oraz otrzymywać informacje o przyszłych wydarzeniach i kursach (możesz się wypisać w dowolnej chwili)\n1. Dołącz do [Meetupa Kurs programowania C++](https://www.meetup.com/pl-PL/Kurs-programowania-C/)\n1. Odwiedź stronę [Coders School - http://coders.school](http://coders.school)\n1. Sprawdź swój poziom znajomości C++ wykonując [10-minutowy test](http://coders.school/sprawdz-sie/)\n1. Zapoznaj się z naszą ofertą [kursu C++](http://coders.school/kurs-cpp/)\n1. Zgłoś się na [darmowe konsultacje z C++](http://coders.school/post/darmowe-konsultacje-z-cpp/)\n1. W razie jakichkolwiek pytań napisz mi maila - lukasz(at)coders.school\n\n![Hello job!](http://coders.school/wp-content/uploads/2017/06/back.jpg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoders-school%2Fmeetup_modern_cpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoders-school%2Fmeetup_modern_cpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoders-school%2Fmeetup_modern_cpp/lists"}