그럴듯한 개발 블로그
article thumbnail
간단 echo server 구현 (C++)
<language>/c++ 2023. 10. 16. 18:47

socket관련 시스템콜 함수들을 사용해 보았다.#include #include // server.cpp #include #include #define PORT 8080 int main() { int sock, new_sock; struct sockaddr_in addrStruct; // 소켓 만들기 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == 0) { std::cerr

article thumbnail
c++ class 상속, 가상함수 테이블, 추상클래스
<language>/c++ 2023. 8. 7. 17:12

상속 class 자식클래스 : 접근제한자(public, protected, private) 부모클래스 { 추가 멤버 선언 }; 틀을 가져다 그대로 복사하고 추가하는 느낌으로 이해했다. 자식 클래스에선 부모의 private는 접근할 수 없다. private는 해당 클래스 내에서만 접근이 가능하고, protected는 해당 클래스와 하위 클래스에서 접근이 가능하다. 접근 제한자를 설정하면 그 접근 제한자보다 높은 권한? 은 같은 권한으로 바꾼다. ex) private로 상속하면, 상속받은 부모의 public멤버도 다 private처리됨 private < protected < public public으로 상속하면 그냥 권한 그대로 쓴다는 뜻. virtual ? 자식 클래스에서 함수를 재정의(override)할..

c++ 레퍼런스(참조자)
<language>/c++ 2023. 7. 6. 18:56

// 포인터와 레퍼런스의 차이를 알아보는 코드이다. intmain() { std::stringstr = "HI THIS IS BRAIN"; std::string*stringPTR; std::string&stringREF = str; // 레퍼런스는 선언하면서 초기화 해줘야 한다. stringPTR = &str; // 주소 출력부 std::cout

c++ 동적할당
<language>/c++ 2023. 7. 6. 18:53

//객체의 포인터를 반환하는 함수이다. Zombie* newZombie(std::string name) { Zombie *zom = new Zombie(name); return (zom); } cpp에서 동적할당을 하고 싶을 땐 객체이름 *이름 = new 생성자(arg); 이런식으로 한다. //객체 배열 포인터를 반환하는 함수이다. Zombie* zombieHorde( int N, std::string name ) { Zombie *zom = new Zombie[N]; for (int i = 0; i < N; i++) zom[i].setName(name); return (zom); } 객체 배열을 동적할당 할 땐 생성자 안에 arg를 직접 넣을 수가 없다. 만든 후에 초기화 해 주는 모습이다. intma..

cpp 파일 컨트롤(ifstream ofstream)
<language>/c++ 2023. 7. 5. 12:53

C++의 헤더에 정의된 ifstream와 ofstream 클래스는 파일의 입력 및 출력 작업을 담당합니다. ifstream는 파일로부터 데이터를 읽는 데 사용되고, ofstream는 파일에 데이터를 쓰는 데 사용됩니다. 아래에 각 클래스의 기본 사용법을 설명하겠습니다. ifstream 사용 방법: 헤더 파일을 포함시킵니다: #include ifstream 객체를 선언하고 파일을 엽니다: ifstream inputFile("파일명"); 파일을 열었는지 확인합니다: if (inputFile.is_open()) { // 파일이 열렸을 때 수행할 작업을 여기에 작성합니다. } else { // 파일을 열지 못했을 때 수행할 작업을 여기에 작성합니다. } 파일에서 데이터를 읽습니다: int number; inpu..

cpp split
<language>/c++ 2023. 5. 29. 01:20

문자열 알고리즘 문제 나오면 매번 구현하다 빡쳐서 하나 만듬 #include #include using namespace std; vectorft_split(string s, char sep) // 구분자 하나짜리 { vectorres; intstart_idx = 0; for (int i = 0; i start_idx) res.push_back(s.substr(start_idx, i - start_idx)); start_idx = i + 1; } } if (start_idx < s.size()) res.push_back(s.substr(start_idx, s.size() - start_idx)); return (res); ..