전체 글 212

Try Catch, throw

→ 우리에게 익숙한 예외처리는 if문을 이용한 예외처리임. 하지만 if문을 보고 예외처리를 위한 코드인지 프로그램의 흐름을 구성하는 코드인지 쉽게 구분하지 못해서 가독성이 떨어짐. C++의 예외처리 메커니즘을 이용하면 가독성을 높일 수가 있다. C++은 구조적으로 예외를 처리할 수 있는 메커니즘을 제공한다. 가독성과 유지보수성을 높일 수 있을 뿐만 아니라, 예외의 처리를 프로그램의 일반적인 흐름에서 독립시키는 것이 가능하다. Try Try 블록은 예외 발생에 대한 검사의 범위를 지정할 때 사용됨. 즉, try 블록 내에서 예외가 발생하면, C++의 예외처리 메커니즘에 의해서 처리가 된다. try { // 예외발생 예상지역 } try 블록을 묶는 기준은 예외가 발생할만한 영역을 묶는 것이 아니다! 예외가 ..

ex02

들어가기 전 추상 클래스, 순수 가상 함수에 대해 공부하고 가자 https://wo-dbs.tistory.com/156 순수 가상 함수, 추상 클래스 순수 가상 함수 C++ 가상 함수(virtual function)는 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미한다. 이와는 달리 순수 가상 함수(pure virtual function)란 파생 클래스에서 반드시 재정의 wo-dbs.tistory.com ex01에서 한 소스 파일들을 그대로 붙여넣기 한 후에 우리가 바꾸어야할 것은 Animal.hpp이다 makesound에 =0 를 넣어주면 된다.! Animal.hpp #ifndef ANIMAL_HPP # define ANIMAL_HPP #include class Animal { protect..

순수 가상 함수, 추상 클래스

순수 가상 함수 C++ 가상 함수(virtual function)는 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미한다. 이와는 달리 순수 가상 함수(pure virtual function)란 파생 클래스에서 반드시 재정의해야 하는 멤버 함수를 의미한다. 따라서 파생 클래스에서 재정의하지 않으면 사용 불가능. 순수 가상 함수는 virtual 키워드와 함께 = 0으로 표시된다. → 즉 virtual 키워드만 있으면 가상 함수이고 =0이 같이 붙으면 순수 가상 함수라는 말임. class Base { public: virtual void pureVirtualFunction() const = 0; }; 추상 클래스 C++에서는 하나 이상의 순수 가상 함수를 포함하는 클래스를 추상 클래스(abstrac..

ex01(깊은 복사)

들어가기 전 깊은 복사를 공부하고 가자 https://wo-dbs.tistory.com/153 깊은 복사 여기서는 깊은 복사에 대한 개념을 위주로 보기 보단 코드로 작성 예시를 보겠다 얕은 복사와 깊은 복사로 나뉘게 되는데 보통 우리는 얕은 복사를 사용하게 된다. 하지만 동적 할당을 한 후 얕 wo-dbs.tistory.com ex00에서 파일 그대로 복사하고 추가해야될 파일은 Brain.cpp Brain.hpp, 수정해야될 파일은 Dog.cpp, Cat.cpp Brain.hpp Brain.cpp 만들기 #ifndef BRAIN_HPP # define BRAIN_HPP #include "iostream" class Brain { private: std::string ideas[100]; public: B..

ex00(가상 함수)

들어가기 전 밑 블로그에서 가상 함수를 공부하고 가자 ~~ https://wo-dbs.tistory.com/152 C++ 가상 함수 가상 함수란 가상함수는 부모 클래스에서 상속받을 클래스에서 재정의할 것으로 기대하고 정의해놓은 함수이다. virtual이라는 예악어를 함수 앞에 붙여서 생성할 수 있으며 이렇게 생성된 가상 wo-dbs.tistory.com Animal을 먼저 만들자. virtual을 통해 소멸자와, makeSound 구현 Animal.hpp #ifndef ANIMAL_HPP # define ANIMAL_HPP #include class Animal { protected: std::string type; public: Animal(void); Animal(const Animal &obj); ..

깊은 복사

여기서는 깊은 복사에 대한 개념을 위주로 보기 보단 코드로 작성 예시를 보겠다 얕은 복사와 깊은 복사로 나뉘게 되는데 보통 우리는 얕은 복사를 사용하게 된다. 하지만 동적 할당을 한 후 얕은 복사를 하게 되면 우변에 동적 할당 된 친구를 그냥 가리키는 것 밖에 안 된다. 그래서 새롭게 동적 할당을 하여 복사를 해주는 것이 깊은 복사라고 생각하면 된다. Cat::Cat(Cat const &cat) { this->brain = nullptr; *this = cat; std::cout type = cat.getType(); if (this->brain) { delete this->brain; } this->brain = new Brain(*(cat.brain)); std::cout brain; } this->..

C++ 가상 함수

가상 함수란 가상함수는 부모 클래스에서 상속받을 클래스에서 재정의할 것으로 기대하고 정의해놓은 함수이다. virtual이라는 예악어를 함수 앞에 붙여서 생성할 수 있으며 이렇게 생성된 가상함수는 파생 클래스에서 재정의하면 이전에 정의되었던 내용들은 모두 새롭게 정의된 내용들로 교체된다. 이렇게 설명을 들으면 오버라이딩이랑 비슷하다고 생각할 수 있는데 아니다. 일단 가상 함수를 쓰는 이유는 업 캐스팅을 할 때 많이 사용하는 것으로 생각하면 될 것이다 업 캐스팅이란? 부모 클래스를 가리키는 포인터를 선언한 후 그 변수에 자식을 넣어주는 것이다. 코드를 보며 설명을 해보겠다. class Animal { int hp; inthunger; virtual ~Animal(); virtual getHP() return..

ex01(상속, 오버라이딩, 가상 함수)

ex01을 하기전 상속에 대한 공부를 해보자 https://wo-dbs.tistory.com/147 C++ 상속 상속(inheritance)이란? “일정한 친족적 관계가 있는 사람 사이에 한 쪽이 사망하거나 법률상의 원인이 발생하였을 때 재산적 또는 친족적 권리와 의무를 계승하는 제도” 라고 네이버 사전에 정 wo-dbs.tistory.com 공부를 한 후 상속 오버라이딩 https://wo-dbs.tistory.com/148 C++ 상속 오버라이딩 현재 ScavTrap이 ClapTrap을 상속받은 상태 ScavTrap.hpp #ifndef SCAVTRAP_HPP # define SCAVTRAP_HPP # include # include "ClapTrap.hpp" class ScavTrap : publi..