diff --git a/00 Inbox/29605321 - OOP 4_16.md b/00 Inbox/29605321 - OOP 4_16.md index 7445abd..b2bc92d 100644 --- a/00 Inbox/29605321 - OOP 4_16.md +++ b/00 Inbox/29605321 - OOP 4_16.md @@ -52,9 +52,6 @@ class Pokemon { public: // visibility modifier int exp; int level; - int attack; - int defense; - int speed; int hp; void upgrade(int gainedExp) { @@ -67,10 +64,97 @@ public: // visibility modifier } int main() { - Pokemon fukano = {3600, 1, 400, 400, 20, 1200}; + Pokemon fukano = {3600, 1, 1200}; cout << "Exp of fukano: " << fukano.exp << endl; fukano.upgrade(400); cout << "Exp of fukano: " << fukano.exp << endl; } ``` +### Scope Modifiers +If we want to hide data beyond the class itself we can use the `private` visibility modifier: + +```C++ +class Pokemon { +public: + string name; + +private: + int exp; + int level; + int hp; + +public: + void upgrade(int gainedExp) { + exp += gainedExp; + if (exp >= 4000) { + exp -= 4000; + level += 1; + } + } +} + +int main() { + Pokemon fukano = {3600, 1, 1200}; + fukano.upgrade(400); // this is OK + fukano.exp += 400; // this is not OK +} +``` + +### Getters and Setters +_Getters and Setters_ allow **controlling the change** like: +- ensuring a number is in a range +- update depending parameters (like level with exp) + +```c++ +class Pokemon { +// ... +public: + void setExp() { /*...*/ } + int getExp() { /*...*/ } +} +``` + +### Constructors + +Given the class: +```C++ +class Pokemon { +private: + int exp; + int level; +} +``` + +We can create a new instance using the _basic constructor_: +```C++ +class Pokemon { +// ... +public: + // Default constructor: allows Pokemon ; -> exp = 0, level = 0; + Pokemon(): exp(0), level(0) {}; + // or + Pokemon(0, 0); + + // Base constructor + Pokemon(int e, int l) { + exp = e; + level = l; + } + // or as + Pokemon(int e, int l): exp(e), level(l) {}; +} + +int main() { + Pokemon fukano(3600, 1); +} +``` + +We can also create an instance as a copy of another object of the _same class_: +```C++ +class Pokemon { +// ... +public: + Pokemon(const Pokemon& p) +} +``` \ No newline at end of file