여기서 중요한 것은 포인터와 레퍼런스의 차이를 아는 것 → 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 =..
→ C++에서 this는 객체 내부에서 자신을 가리키는 포인터. this 포인터는 클래스의 멤버 함수 내부에서 사용되며, 현재 호출 중인 멤버 함수가 속한 객체를 가리킨다. 이를 통해 멤버 함수 내부에서 객체의 멤버 변수와 다른 멤버 함수에 접근할 수 있다. this를 사용할 때 멤버 변수에 접근: this 포인터를 사용하여 멤버 함수 내에서 현재 객체의 멤버 변수에 접근할 수 있다. 이는 멤버 변수와 지역 변수의 이름이 충돌하는 경우 유용. class MyClass { public: int x; void setX(int value) { this->x = value; // this 포인터를 사용하여 멤버 변수 x에 접근 } }; 2. 멤버 함수 호출: 멤버 함수 내에서 다른 멤버 함수를 호출할 때 thi..
생성자(constructor) → 공을 생산하는 기계가 있음. 일반적으로 흰 공을 생산하다가, 빨간색 페인트를 주입하면 빨간공이, 파란색 페인트를 주입하면 파란공이 나온다. 생산 시점에 원하는 색의 페인트를 주입하면 다양한 색의 공을 생산 가능 클래스에서 객체를 생성할 때 객체를 초기화 가능하다. 공을 생산할 때 공의 색을 바꿀 수 있다는 말과 동일함. 클래스는 객체가 생성될 때 자동으로 실행되는 생성자(constructor)라는 특별한 멤버 함수를 통해 객체를 초기화 한다. 한 클래스에 여러 개의 생성자를 둘 수 있으나, 이 중 하나만 실행됨. 생성자의 특징 1. 생성자의 목적은 객체가 생성될 때 필요한 초기 작업을 위함이다. 예를 들어 멤버 변수의 값을 특정 값으로 설정하거나, 메모리를 동적 할당 받..
Class 안에 있는 private과 public 차이 C++에서 private와 public은 클래스 멤버들의 접근 제어를 지정하는 키워드이다. 이 두 접근 제어 지시자는 클래스 내부의 멤버 변수와 멤버 함수가 외부에서 어떻게 접근 가능한지를 결정한다. private: private으로 지정된 멤버 변수나 멤버 함수는 클래스 내부에서만 접근 가능합니다. 즉, 클래스 내부의 다른 멤버 함수에서는 접근할 수 있지만 클래스 외부에서는 접근할 수 없다. private으로 선언된 멤버들은 클래스의 구현 내부에 있으므로 외부에서 직접 접근하거나 수정할 수 없다. 이는 정보 은닉(information hiding)의 개념과 관련이 있어서 클래스의 내부 상세 구현을 숨기고 오직 공개된 인터페이스를 통해 상호작용하도록..
클래스란? 쉽게 말하자면 C의 구조체에서 확장된 C++의 구조체의 또 다른 이름이다. 클래스는 변수와 함께 함수까지도 포함시킬 수 있다. 그러면 구조체와 클래스의 차이점이 무엇일까? 구조체와 클래스의 차이점은 기본 접근 제한자의 차이일뿐, 그 이상 다른 게 없다. 구조체 같은 경우는 기본 접근 제한자가 public이며, 클래스의 기본 접근 제한자는 private으로 제한되어 있다. ‘둘다 동일한 기능인데 왜 사라지지 않아’ 라는 질문 → C언어와의 하위 호환성을 위해서 남겨둠. 우리가 C언어에서 보았던 구조체 예제에서, struct를 class로만 바꾸어 주어도 됨. 조심해야할 부분 → 기본 접근자가 다름, 무작정 클래스에 접근하려하면 컴파일러가 에러를 내보낼 수도 있다. 이제 객체지향 프로그래밍(OOP..
std란? →C++ 프로그래밍에서 자주 보이는 약어로, 표준 라이브러리(Standard library)에 속한 요소들을 나타냄. std == Standard의 줄임말로, C++ 표준 라이브러리에 정의된 여러 클래스, 함수, 객체 및 기능을 포함한다. std안에는 cout, cin, endl이라는 라이브러리들이 있다. cout cout는 "character output"의 약자로, 표준 출력 스트림(화면 출력)을 나타낸다.
C++에서 네임스페이스는 식별자(변수, 함수, 클래스 등)를 그룹화하고 겹치지 않는 범위(scope)를 제공하는 방법이다. 네임스페이스를 사용하면 코드의 이름 충돌을 방지하고 라이브러리, 프레임워크 또는 여러 개발자가 작성한 코드를 효과적으로 통합할 수 있다. 예제 // 네임스페이스 정의 namespace MyNamespace { int x; // 변수 x를 MyNamespace 네임스페이스 안에 정의 void myFunction(); // 함수 myFunction을 MyNamespace 네임스페이스 안에 정의 } // 네임스페이스의 사용 int main() { MyNamespace::x = 5; // MyNamespace 네임스페이스의 변수 x에 접근 MyNamespace::myFunction(); /..
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 및 이후 버전이 있으며, 각각 새로..
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