c++ 54

레퍼런스와 포인터

여기서 중요한 것은 포인터와 레퍼런스의 차이를 아는 것 → C++에서는 포인터와 레퍼런스라는 개념이 등장 포인터는 C에도 있던 개념 레퍼런스는 C++에서 등장한 개념 포인터와 레퍼런스의 차이는 함수의 매개변수로의 전달 방법으로 알아보자 매개변수를 단순 값 타입로 전달했을 경우 함수에선 단순히 복사된 값을 사용하기 때문에 원본에 접근하지 못함. 만약 포인터 또는 레퍼런스로 전달하면 함수에서도 주소를 통해 원본에 접근하여 값을 읽거나 수정할 수 있도록 해줄 수 있다. 표면적인 차이 포인터 사용 시 다음과 같은 매개변수를 포인터로 주고 함수 호출 시 주소를 전달. void func(int* ptr) { *ptr *= 2; } int num = 3; func(&num); // call by address → 함..

C++의 동적할당

변수의 메모리를 new를 통해 동적 할당하는 경우 데이터는 힙 영역에 저장됨 힙에 저장된 데이터는 프로그램이 끝날때까지 유지되기 때문에 더이상 사용하지 않는 경우 반드시 delete로 해제시켜주어야 함 힙에 할당하는 것은 비교적 속도가 느리고, 포인터를 역참조하여 변수의 값에 접근하는 것 역시 직접 접근하는 것보다는 느림 일반적으로 변수를 선언할 경우 정적 할당되어 데이터는 스택 영역에 저장됨 스택 영역에 저장된 데이터는 해당 변수가 지정된 범위(scope)를 벗어날시 자동으로 해제 및 소멸 스택에 할당하는 것은 비교적 속도가 빠르지만, 스택 자체의 크기가 비교적 작으므로 유의해야함 #include int main() { //1바이트 만큼 heap 할당 char *ptr = new char; *ptr =..

this

→ C++에서 this는 객체 내부에서 자신을 가리키는 포인터. this 포인터는 클래스의 멤버 함수 내부에서 사용되며, 현재 호출 중인 멤버 함수가 속한 객체를 가리킨다. 이를 통해 멤버 함수 내부에서 객체의 멤버 변수와 다른 멤버 함수에 접근할 수 있다. this를 사용할 때 멤버 변수에 접근: this 포인터를 사용하여 멤버 함수 내에서 현재 객체의 멤버 변수에 접근할 수 있다. 이는 멤버 변수와 지역 변수의 이름이 충돌하는 경우 유용. class MyClass { public: int x; void setX(int value) { this->x = value; // this 포인터를 사용하여 멤버 변수 x에 접근 } }; 2. 멤버 함수 호출: 멤버 함수 내에서 다른 멤버 함수를 호출할 때 thi..

생성자, 소멸자

생성자(constructor) → 공을 생산하는 기계가 있음. 일반적으로 흰 공을 생산하다가, 빨간색 페인트를 주입하면 빨간공이, 파란색 페인트를 주입하면 파란공이 나온다. 생산 시점에 원하는 색의 페인트를 주입하면 다양한 색의 공을 생산 가능 클래스에서 객체를 생성할 때 객체를 초기화 가능하다. 공을 생산할 때 공의 색을 바꿀 수 있다는 말과 동일함. 클래스는 객체가 생성될 때 자동으로 실행되는 생성자(constructor)라는 특별한 멤버 함수를 통해 객체를 초기화 한다. 한 클래스에 여러 개의 생성자를 둘 수 있으나, 이 중 하나만 실행됨. 생성자의 특징 1. 생성자의 목적은 객체가 생성될 때 필요한 초기 작업을 위함이다. 예를 들어 멤버 변수의 값을 특정 값으로 설정하거나, 메모리를 동적 할당 받..

클래스

클래스란? 쉽게 말하자면 C의 구조체에서 확장된 C++의 구조체의 또 다른 이름이다. 클래스는 변수와 함께 함수까지도 포함시킬 수 있다. 그러면 구조체와 클래스의 차이점이 무엇일까? 구조체와 클래스의 차이점은 기본 접근 제한자의 차이일뿐, 그 이상 다른 게 없다. 구조체 같은 경우는 기본 접근 제한자가 public이며, 클래스의 기본 접근 제한자는 private으로 제한되어 있다. ‘둘다 동일한 기능인데 왜 사라지지 않아’ 라는 질문 → C언어와의 하위 호환성을 위해서 남겨둠. 우리가 C언어에서 보았던 구조체 예제에서, struct를 class로만 바꾸어 주어도 됨. 조심해야할 부분 → 기본 접근자가 다름, 무작정 클래스에 접근하려하면 컴파일러가 에러를 내보낼 수도 있다. 이제 객체지향 프로그래밍(OOP..

std::cout, cin, endl

std란? →C++ 프로그래밍에서 자주 보이는 약어로, 표준 라이브러리(Standard library)에 속한 요소들을 나타냄. std == Standard의 줄임말로, C++ 표준 라이브러리에 정의된 여러 클래스, 함수, 객체 및 기능을 포함한다. std안에는 cout, cin, endl이라는 라이브러리들이 있다. cout cout는 "character output"의 약자로, 표준 출력 스트림(화면 출력)을 나타낸다.

C++ 네임스페이스(namespace)

C++에서 네임스페이스는 식별자(변수, 함수, 클래스 등)를 그룹화하고 겹치지 않는 범위(scope)를 제공하는 방법이다. 네임스페이스를 사용하면 코드의 이름 충돌을 방지하고 라이브러리, 프레임워크 또는 여러 개발자가 작성한 코드를 효과적으로 통합할 수 있다. 예제 // 네임스페이스 정의 namespace MyNamespace { int x; // 변수 x를 MyNamespace 네임스페이스 안에 정의 void myFunction(); // 함수 myFunction을 MyNamespace 네임스페이스 안에 정의 } // 네임스페이스의 사용 int main() { MyNamespace::x = 5; // MyNamespace 네임스페이스의 변수 x에 접근 MyNamespace::myFunction(); /..

C++ 컴파일

c++ -Wall -Wextra -Werror -std=c++98 std=c++98란? std=c++98은 C++ 컴파일러에서 사용되는 옵션 중 하나로, C++98 표준을 사용하여 소스 코드를 컴파일하도록 지시한다. 이 옵션은 C++ 표준 라이브러리와 언어 기능을 C++98 표준에 따라 컴파일러가 처리하도록 한다. C++98은 1998년에 처음으로 C++ 표준으로 채택된 버전으로, 이전 버전인 C++98 표준 이전의 C++ 언어 버전과 비교하여 새로운 기능과 개선 사항을 도입하였음. 현재로서는 매우 오래된 표준이며, C++ 언어는 그 이후에도 여러 번의 표준 업데이트를 거쳐 발전해왔다고 한다. C++ 표준의 후속 버전에는 C++11, C++14, C++17, C++20 및 이후 버전이 있으며, 각각 새로..

replace()

C++의 replace 함수는 std::string 객체 내의 일부 문자열을 다른 문자열로 치환하는 데 사용된다. 원형 string& replace(size_t pos, size_t len, const string& str); 처음 → 시작 부분 인덱스 중간 → 인덱스 + 처음 마지막 → 치환할 문자 이 함수는 주어진 위치(pos)부터 시작하여 지정된 길이(len)만큼의 문자열을 새로운 문자열(str)로 대체한다. 예: #include #include int main() { std::string str = "Hello, world!"; std::cout

stoi()

C11 함수이며 쉽게 말해 string을 int로 반환해주는 함수이다. "String to Integer"의 줄임말로, 문자열을 정수형 데이터로 변환하는 데 사용된다. stoi 함수는 헤더 파일에 포함되어 있으며, 문자열을 받아들여 해당 문자열이 나타내는 정수를 반환합니다. 함수의 기본 형식은 다음과 같습니다: 원형 int stoi(const string& str, size_t* idx = 0, int base = 10); str: 정수로 변환할 문자열입니다. idx (선택적): 변환된 문자열의 마지막 인덱스를 가리키는 포인터. 이 값이 필요하지 않으면 디폴트값으로 설정될 수 있다. base (선택적): 문자열이 표현하는 숫자의 진법을 지정하는 매개변수이다. 디폴트값은 10이며, 2부터 36까지의 값을 ..