diff options
Diffstat (limited to 'cpp04/ex03/main.cpp')
| -rw-r--r-- | cpp04/ex03/main.cpp | 213 |
1 files changed, 212 insertions, 1 deletions
diff --git a/cpp04/ex03/main.cpp b/cpp04/ex03/main.cpp index 6444877..bede834 100644 --- a/cpp04/ex03/main.cpp +++ b/cpp04/ex03/main.cpp @@ -6,7 +6,7 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 17:58:01 by charles #+# #+# */ -/* Updated: 2020/11/15 17:23:07 by charles ### ########.fr */ +/* Updated: 2020/11/17 08:33:22 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,4 +35,215 @@ int main() delete me; delete src; } + + Character ch("YO"); + + std::cout << std::endl; + + { + std::cout << "================== ICE ==================" << std::endl; + Ice i; + std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl; + i.use(ch); + std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl; + Ice i2(i); + std::cout << "Type: " << i2.getType() << ", XP: " << i2.getXP() << std::endl; + Ice i3; + i3 = i2; + std::cout << "Type: " << i2.getType() << ", XP: " << i2.getXP() << std::endl; + AMateria *i4 = new Ice(i); + std::cout << "Type: " << i4->getType() << ", XP: " << i4->getXP() << std::endl; + + std::cout << "################## NO ASSIGN TYPE" << std::endl; + AMateria *c = new Cure(); + *c = i3; + std::cout << "Type: " << c->getType() << ", XP: " << c->getXP() << std::endl; + + std::cout << "################## CLONE" << std::endl; + AMateria *cl = i3.clone(); + std::cout << "Type: " << cl->getType() << ", XP: " << cl->getXP() << std::endl; + + std::cout << "################## USE" << std::endl; + i.use(ch); + std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl; + i.use(ch); + std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl; + i.use(ch); + std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl; + i.use(ch); + std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl; + i.use(ch); + std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl; + + delete cl; + delete c; + delete i4; + } + + std::cout << std::endl; + + { + std::cout << "================== ICE ==================" << std::endl; + Cure c; + std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl; + c.use(ch); + std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl; + Cure c2(c); + std::cout << "Type: " << c2.getType() << ", XP: " << c2.getXP() << std::endl; + Cure c3; + c3 = c2; + std::cout << "Type: " << c2.getType() << ", XP: " << c2.getXP() << std::endl; + AMateria *c4 = new Cure(c); + std::cout << "Type: " << c4->getType() << ", XP: " << c4->getXP() << std::endl; + + std::cout << "################## NO ASSIGN TYPE" << std::endl; + AMateria *i = new Ice(); + *i = c3; + std::cout << "Type: " << i->getType() << ", XP: " << i->getXP() << std::endl; + + std::cout << "################## CLONE" << std::endl; + AMateria *cl = c3.clone(); + std::cout << "Type: " << cl->getType() << ", XP: " << cl->getXP() << std::endl; + + std::cout << "################## USE" << std::endl; + c.use(ch); + std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl; + c.use(ch); + std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl; + c.use(ch); + std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl; + c.use(ch); + std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl; + c.use(ch); + std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl; + + delete cl; + delete i; + delete c4; + } + + std::cout << std::endl; + + { + std::cout << "================== CHARACTER ==================" << std::endl; + Character c("Jean-Didier"); + std::cout << "Name: " << c.getName() << std::endl; + Character c2(c); + std::cout << "Name: " << c2.getName() << std::endl; + Character c3("SHOULD NOT BE PRINTED"); + c3 = c; + std::cout << "Name: " << c3.getName() << std::endl; + + std::cout << "################## EQUIP/USE" << std::endl; + c.equip(new Ice()); + c.equip(new Cure()); + c.use(0, ch); + c.use(1, ch); + c.equip(new Cure()); + c.equip(new Ice()); + c.use(2, ch); + c.use(3, ch); + c.use(-1, ch); + c.use(4, ch); + c.unequip(0); + c.use(0, ch); + c.use(3, ch); + c.unequip(0); + c.use(0, ch); + c.use(2, ch); + c.unequip(0); + c.use(0, ch); + c.use(1, ch); + c.unequip(0); + c.use(0, ch); + c.unequip(0); + c.unequip(0); + c.unequip(0); + c.unequip(0); + c.unequip(0); + c.equip(NULL); + c.use(0, ch); + c.equip(NULL); + c.use(1, ch); + + std::cout << "################## DEEP COPY" << std::endl; + c.equip(new Ice()); + c.use(0, ch); + Character copy(c); + std::cout << "Copied name: " << copy.getName() << std::endl; + copy.use(0, ch); + c.equip(new Cure()); + c.use(1, ch); + copy.use(1, ch); + Character assigned("SHOULD NOT BE PRINTED"); + assigned = c; + std::cout << "Assign name: " << copy.getName() << std::endl; + assigned.use(1, ch); + c.equip(new Ice()); + c.use(2, ch); + assigned.use(2, ch); + + std::cout << "################## INTERFACE" << std::endl; + ICharacter *ic = new Character(c); + std::cout << "Interface name: " << ic->getName() << std::endl; + ic->use(0, ch); + ic->use(1, ch); + ic->use(2, ch); + ic->equip(new Ice()); + ic->use(3, ch); + ic->unequip(1); + ic->use(1, ch); + delete ic; + } + + std::cout << std::endl; + + { + std::cout << "================== MATERIA SRC ==================" << std::endl; + MateriaSource ms; + ms.learnMateria(new Ice()); + MateriaSource ms2(ms); + MateriaSource ms3; + ms3.learnMateria(new Cure()); + ms3 = ms; + std::cout << ms3.createMateria("cure") << std::endl; + AMateria *m; + m = ms.createMateria("ice"); + std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl; + delete m; + m = ms2.createMateria("ice"); + std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl; + delete m; + m = ms3.createMateria("ice"); + std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl; + delete m; + + m = ms.createMateria(""); + std::cout << m << std::endl; + m = ms.createMateria("foo"); + std::cout << m << std::endl; + ms.learnMateria(NULL); + + ms.learnMateria(new Ice()); + ms.learnMateria(new Ice()); + ms.learnMateria(new Ice()); + ms.learnMateria(new Ice()); + ms.learnMateria(new Ice()); + ms.learnMateria(new Ice()); + ms.learnMateria(new Ice()); + m = ms.createMateria("ice"); + std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl; + delete m; + + std::cout << "################## INTERFACE" << std::endl; + IMateriaSource *ims = new MateriaSource(ms2); + m = ims->createMateria("ice"); + std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl; + delete m; + ims->learnMateria(new Cure()); + m = ims->createMateria("cure"); + std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl; + delete m; + delete ims; + } } |
