전체 글 195

ex01

Form Class 만들기 상수 이름. == const std::string name; 서명되었는지 여부를 나타내는 부울입니다(구성 시에는 서명되지 않음). == bool sign; 서명하려면 일정한 등급이 필요합니다. == const int signGrade; 이를 실행하기 위해서는 일정한 등급이 필요합니다. == const int execGrade; 양식의 등급은 관료에게 적용되는 것과 동일한 규칙을 따릅니다. 따라서 양식 등급이 범위를 벗어나면 Form::GradeTooHighException 및 Form::GradeTooLowException과 같은 예외가 발생합니다. class GradeTooLowException : public std::exception { public: const char ..

ex00

들어가기 전 try catch, throw과 exception,what을 공부하고 가자! try catch, throw https://wo-dbs.tistory.com/158 Try Catch, throw → 우리에게 익숙한 예외처리는 if문을 이용한 예외처리임. 하지만 if문을 보고 예외처리를 위한 코드인지 프로그램의 흐름을 구성하는 코드인지 쉽게 구분하지 못해서 가독성이 떨어짐. C++의 wo-dbs.tistory.com exception,what https://wo-dbs.tistory.com/159 exception, what → if-else문을 통해 예외를 인지하게 한 후 직접 throw를 던졌었지만 문제가 생기면 std::exception 클래스를 통해 시스템 상 내부에서 알아서 발생한 예외..

exception, what

→ if-else문을 통해 예외를 인지하게 한 후 직접 throw를 던졌었지만 문제가 생기면 std::exception 클래스를 통해 시스템 상 내부에서 알아서 발생한 예외를 throw 한다. 예외(exception)은 프로그램 실행 중에 예기치 않은 상황이나 오류가 발생했을 때 발생하는 이벤트를 가리킵니다. 예외는 프로그램이 비정상적으로 종료되는 것을 방지하고 오류를 처리하는 메커니즘을 제공 → C++ 표준 클래스로 예외의 여러 종류들을 나타내는 여러 자식 클래스들을 두고 있다. • runtime_error 클래스, logic_error 클래스 등등 C++ 표준의 exception 클래스 를 상속받고 있다. #include #include #include int main() { try { std::st..

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..