본문 바로가기

카테고리137

[C ++] 생성자와 소멸자 '생성자'와 '소멸자'는 클래스 객체가 생성 및 소멸될 때 '자동으로' 호출되는 함수이다. 이 두 함수의 특징은 함수임에도 '반환 형식이 없다'는 것과 함수 이름이 클래스 이름과 같다. 다만 소멸자의 이름 앞에는 ~가 붙는다. 클래스이름(); ~클래스이름(); 매개변수가 하나도 없는 생성자를 '디폴트 생성자' 라고 한다. 클래스 제작자가 디폴트 생성자와 소멸자를 기술하지 않아도 컴파일러가 알아서 만들어 넣는다는 점 즉, '생성자와 소멸자가 없는 클래스는 없다'를 기억하자 #include using namespace std; class RAIN { public : RAIN() // 생성자 { cout 2023. 2. 3.
[C ++] 접근 제어 지시자 지시자 설명 public 멤버에 관한 모든 외부 접근이 허용된다. protected 멤버에 관한 모든 외부 접근이 차단된다. 단, 상속 관계에 있는 파생 클래스에서의 접근은 허용된다. private 외부 접근뿐만 아니라 파생 클래스로부터의 접근까지 모두 차단된다. 클래스를 선언할 때 별도로 접근 제어 지시자를 기술하지 않으면 private로 간주된다. #include using namespace std; // 제작자코드 class RAIN { // 기본 접근 제어 지시자는 'private' int Data; public : int GetData(void) { return Data;} void SetData(int Param) { Data = Param; } }; // 사용자코드 int main(void).. 2023. 2. 3.
[C ++] 클래스 기본 문법 우선 클래스를 선언하는 문법은 다음과 같다. class 클래스이름 { 접근제어지시자; 멤버변수선언; 멤버함수선언및정의; }; C언어의 구조체를 선언하는 것과 가장 크게 다른 점은 '접근 제어 지시자'의 등장과 함수를 멤버로 포함할 수 있게 되었다는 것이다. #include using namespace std; class RAIN { public : // 멤버 변수 선언 int Age; char name[32]; // 멤버 함수 선언 및 정의 void Print(void) { // Age와 name은 Print() 함수의 지역 변수가 아니다! printf("%d, %s\n", Age, name); } }; int main(void) { RAIN rain = { 10, "길동" }; rain.Print();.. 2023. 2. 3.
[C ++] Namespace 와 using namespace 네임스페이스는 C++가 지원하는 각종 요소들(변수, 함수, 클래스 등)을 한 범주로 묶어주기 위한 문법이다. namespace 이름 { // 네임스페이스의 시작 ....... // 네임스페이스의 끝 } #include namespace Test { int data = 100; void TestFunc(void) { std::cout 2023. 2. 2.
[C ++] 식별자 검색 순서 C++에서 '식별자가 선언된 위치를 검색하는 순서'이다 전역 함수인 경우 1. 현재 블록 범위 2. 현재 블록 범위를 포함하고 있는 상위 블록 범위 (최대 적용 범위는 함수 몸체까지) 3. 가장 최근에 선언된 변수나 함수 4. using 선언된 네임스페이스 혹은 전역 네임스페이스. 단, 두 곳에 동일한 식별자가 존재할 경우 컴파일 오류 클래스 메서드인 경우 1. 현재 블록 범위 2. 현재 블록 범위를 포함하고 있는 상위 블록 범위 (최대 적용 범위는 함수 몸체까지) 3. 클래스의 멤버 4. 부모 클래스의 멤버 5. 가장 최근에 선언된 전역 변수나 함수 6. 호출자 코드가 속한 네임스페이스의 상위 네임스페이스 7. using 선언된 네임스페이스 혹은 전역 네임스페이스. 단, 두 곳에 동일한 식별자가 존재할.. 2023. 2. 2.
[C ++] 템플릿(Template) 같은 일을 하는 함수가 다섯 개 존재하지만 실제 사용되는 것이 하나라면 결국 불필요한 코드만 늘어나 메모리를 소모하는 꼴이다. 한마디로 비효율적인데 C++에서는 가급적이면 함수 다중 정의 보다는 '함수 템플릿'을 사용하길 권장한다. template 반환형식 함수이름(매개변수) { } #include using namespace std; template T Add(T a, T b) { return a + b; } int main(void) { cout 2023. 2. 2.
[C ++] 다중 정의 (Overloading) C++에서 '다중 정의'는 하나(함수 이름, 변수 이름등)가 여러 의미를 동시에 갖는 것을 말한다. C와 달리 C++에서는 매개변수 구성이 달라지거나 어떤 식으로든 함수 원형이 달라지면 이름이 같더라도 전혀 다른 함수가 된다. #include using namespace std; int Add(int a, int b, int c) { cout 2023. 2. 2.
[C ++] 범위 기반 for문 보통 배열 자료구조에 접근할 때 for문을 자주 사용하는데, 이는 배열의 요소가 선언할 때 확정되기 때문이다. 하지만 만일 배열 요소의 개수를 변경하게 된다면? 당연히 for문도 수정해야하는 번거러움이 생긴다. 이를 해결하기위해 범위 기반 for문을 사용하면 수정할 필요성이 사라진다. for(auto 요소변수 : 배열이름) 반복 구문; #include using namespace std; int main(int argc, char *argv[]) { int arr[5] = {10, 20, 30, 40, 50}; // 일반적인 반복문 for(int i = 0; i < 5; ++i) cout 2023. 2. 2.
[C ++] new와 delete연산자 연산자 new와 delete는 C++에서 객체를 동적할당하고 해제하는 '연산자'이다. 만약 단일 인스턴스라면 다음과 형태로 사용된다. 형식 *변수이름 = new 형식; delete 변수이름; 배열이라면 이렇게 사용한다. 형식 *변수이름 = new 형식[요소개수]; delete[] 변수이름; new연산자의 특징중 하나는 "메모리 크기를 정하지 않는다" 라는점이다. #include int main(int argc, char *argv[]) { int *data = new int; int *newdata = new int(10); *data = 5; std::cout 2023. 2. 2.
[C ++] auto C에서 auto 예약어는 기억 분류 지정자이다. 하지만 사실상 C에서 아무도 auto 예약어를 사용하지 않는다. (어차피 생략하게되면 auto로 지정되고 스택을 사용하도록 컴파일하기 때문) #include int main(void) { int a = 10; int b(a); auto c(b); std::cout 2023. 2. 2.