stack에 대한 공부를 하고 가자 https://wo-dbs.tistory.com/181 stack stack C++ 표준 라이브러리의 std::stack은 스택(stack)을 구현한 어댑터 컨테이너이다. 스택은 LIFO(Last In, First Out) 데이터 구조로, 가장 최근에 삽입된 요소가 가장 먼저 제거된다. std::stack은 기본적으 wo-dbs.tistory.com 이 문제는 stack을 상속받아서 stack을 직접 구현해보는 문제임. 기본 stack의 요소들은 stack을 상속 받아서 잘 사용할 수 있기는 함. 그런데 문제에서 요구하는 건 stack 컨테이너에 없는 반복자의 기능을 넣어서 보여달라고 하는 거임 원래는 stack에 반복자 기능이 없음. 반복자 기능을 넣으려는 게 중요 ..
ex02
이번에는 클래스 템플릿 Array를 구현하는 문제 차근차근 조건대로 해보자. 매개변수가 없는 구성: 빈 배열을 생성합니다. unsigned int n을 매개변수로 사용하여 생성: 기본적으로 초기화된 n개 요소의 배열을 생성합니다. 팁: int * a = new int(); 그런 다음 *a를 표시합니다. private: T *arr; unsigned int _len; 복사 및 할당 연산자에 의한 구성. 두 경우 모두 복사 후 원본 어레이나 복사본을 수정해도 다른 어레이에 영향을 주어서는 안 됩니다. Array(const Array &array) { this->arr = NULL; *this = array; } Array &operator=(const Array &array) { if (this == &ar..
들어가기 전 dynamic_cast를 공부하고 가자 https://wo-dbs.tistory.com/168 dynamic_cast dynamic_cast는 주로 다형성(polymorphism)과 관련이 있다. 이 연산자는 런타임에 안전한 형변환을 수행한다. 즉, 동적으로 객체의 타입을 확인하고, 그 결과에 따라 적절한 형변환을 수행한다. 주로 상 wo-dbs.tistory.com ex02에서는 업캐스팅을 하는 문제이다. Base 클래스 A, B, C가 상속을 받으며 업캐스팅을 한다. #include "Base.hpp" #include "A.hpp" #include "B.hpp" #include "C.hpp" #include #include #include static Base* generate() { s..
이제 form에 어떠한 양식을 더 만들 거임 3가지로 나뉨 ShrubberyCreationForm: 필수 성적: 서명 145, 실행 137 작업 디렉터리에 _shrubbery 파일을 만들고 그 안에 ASCII 트리를 씁니다. RobotomyRequestForm: 필수 성적: 서명 72, 실행 45 드릴링 소음이 발생합니다. 그런 다음 이 50%의 확률로 로봇화되었음을 알려줍니다. 그렇지 않으면 로봇공학이 실패했음을 알립니다. PresidentialPardonForm: 필수 등급: sign 25, exec 5 이 Zaphod Beeblebrox에 의해 사면되었음을 알립니다. ShrubberyCreationForm hpp #ifndef SHRUBBERYCRETIONFORM_HPP # define SHRUBB..
ClapTrap을 상속받은 FragTrap를 만든다. guardGate 대신 highFivesGuys를 구현. FragTrap.hpp #ifndef FRAGTRAP_HPP # define FRAGTRAP_HPP # include # include "ClapTrap.hpp" class FragTrap : public ClapTrap { public: FragTrap(); ~FragTrap(); FragTrap(std::string name); FragTrap(const FragTrap& FragTrap); FragTrap& operator=(const FragTrap& obj); void highFivesGuys(void); }; # endif FragTrap.cpp #include "FragTrap.hp..
이 문제는 비교, 산술, 증감 연산자를 오버로딩 해보는 문제이다. 연산자 오버로딩 → 간단하게 말해서 우리가 알고 있는 +, -, *, / 에서부터 ++, --, [], ==, =등 다양한 연산자들을 우리가 재정의해서 사용할 수 있게 해주는 방법. 아 근데 이 짓을 왜 해야되냐? 컴파일러는 우리가 만든 객체의 연산을 이애하지 못함. 우리가 객체를 만들고, 그 값들을 사용하는데 기본적인 연산자를 사용하지 못 하면 오바이긴 하니,, 우리가 만든 객체들의 연산자들의 정의를 우리가 직접 정의해서 객체끼리의 연산을 가능하도록 만든 거임. 연산자 오버로딩의 제한 → 오버로딩이 가능한 연산자가 있고 불가능한 연산자들이 있다. 이유는 기본적인 C++의 문법이 어긋날 수 있기 때문 Fixed.hpp #ifndef FIX..
여기서 중요한 것은 포인터와 레퍼런스의 차이를 아는 것 개념을 좀 더 알고 싶으면 나의 글 카테코리에 C++의 레퍼런스에 대한 개념을 보고 오자 #include intmain(void) { std::string str = "HI THIS IS BRAIN"; std::string *stringPTR = &str; std::string &stringREF = str; std::cout