요즘 과제를 한다고 정신이 없다. 아직 클래스에 대해 감이 잘 오지 않는다. 대충 추상적으로 클래스에 종속되어 있는 느낌이면 자식클래스로 만들고 상속시키고, 그렇지 않으면 컴포넌트형식으로 클래스들이 서로 상호작용하는 느낌이 들도록 한다는 느낌.
그리고 클래스의 멤버변수는 클래스의 성질을 나타내고, 메소드는 구현, 동작, 표현등을 나타낸다는 것을 정말 잘 알지만 막상 실제로 코드를 작성하려면 어떤 것을 protected, public, private로 설정할지, 그리고 const 매개변수를 어떨 때 쓰는게 좋은지 감이 잘 오지 않는다. 그리고 C++ 에서 활용할 수 있는 STL 또한 아직 미숙해서 메소드 하나하나 구현하는데도 버벅이니깐 미칠 지경이다.
뭔가 전체적인 그림은 좀 알 것 같기도 한데 흐릿한 느낌이랄까 마치 물속에서 사물을 보는 느낌과 비슷하다. 그리고 내 실력은 물속에서 주먹질하는것 처럼 흐물텅거리는 느낌이다. 휴우.. 좀 더 공부하면 머리속에 코드의 윤곽이 좀더 드러날까... 아직 까진 막막하다.
그렇다고 과제를 안할수도 없고 과제를 하는것이 연습에 매우 도움이 되기 때문에 !
대충 허접한 설계도..... 이런식으로 작성해서 시작했다. 커스텀벡터를 구현했을 때 배웠던 헤더파일과 메인파일 나누기. 우선 각각의 클래스를 하나씩 헤더파일을 나눠서 만들어주고 나머지를 main.cpp에 넣는방향으로 하기로 했다. 원래는 클래스 각각 헤더파일에는 선언하고 cpp파일까지 나누어서 구현도 각각 따로 해주려고 했는데 너무 정신없고 아직 미숙하기도 해서 좀 더 익숙해지면 해봐야겠다고 생각했다.
처음 당차게 파일을 많이 만들었지만 다시 줄인모습..
여튼 이렇게 해도 여전히 class 이 다섯글자를 쓰는 것 조차 익숙치 않기 때문에 조심스럽다.
book.h
#ifndef BOOK
#define BOOK
#include <string>
#include <map>
class Book {
private:
std::string title;
std::string author;
public:
Book(std::string booktitle, std::string authorname) : title(booktitle), author(authorname) {}
~Book() {}
std::string gettitle() const {
return title;
}
std::string getauthor() const {
return author;
}
};
#endif // !BOOK
우선 위의 그림처럼 Book 클래스에는 책 이름(title), 저자(author)을 멤버 변수로 하고 매개변수 생성자도 만들었다.
이후 title
과 author
은 private
에 속해있기 때문에 읽기전용으로 멤버 변수들을 불러오기 위한 메소드 또한 만들었다.
book_manager.h
#ifndef BOOKMANAGER
#define BOOKMANAGER
#include <string>
#include <vector>
#include "Book.h"
#include <iostream>
class Book_Manager {
private:
std::vector<Book> books;
protected:
Book* FindBookbyTitle(const std::string& title) {
for (int i = 0; i < books.size(); i++) {
if (books[i].gettitle() == title) {
return &books[i];
}
}
return nullptr;
}
Book* FindBookbyAuthor(const std::string& author) {
for (int i = 0; i < books.size(); i++) {
if (books[i].getauthor() == author) {
return &books[i];
}
}
return nullptr;
}
public:
void AddBook(const Book& newbook) {
books.push_back(newbook);
}
void DispalyAllBooks() {
for (int i = 0; i < books.size(); i++) {
std::cout << "책 제목 : " << books[i].gettitle() << std::endl << "저자 : " << books[i].getauthor() << std::endl;
}
}
Book* GetBookbyTitle(const std::string& title) {
}
Book* getbookbyAuthor(const std::string& author);
};
#endif
우선 하다가 TIL 작성을 위해 아직 완성이 되지 않은 모습이다. Book_Manger
클래스 같은 경우, Book
클래스의 객체들을 관리하기 위해 vector
배열을 선언하였다. 그리고 책이름, 저자를 통해서 해당 객체를 찾기위해 반환값을 포인터로 하였다.
일단 작성을 해보니 처음 작성하기전 무서운 것에 비하면 생각보다는 잘 적혔던 느낌이다. 그러나 아직 어려운 건 맞다. (메소드 하나 완성하는데도 버벅이고 오래걸린달까?..) 내일 제출이기 때문에 최선을 다해서 작성을 하고 주말에 나만의 프로젝트를 하나 만들어보면서 복습하는 시간을 가져봐야겠다는 생각이 든다.