본문 바로가기

Develop/C++15

[C++] cin, getline 함수 # cin 에 포함되어 있다. 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져온다. 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들인다. 개행 문자를 입력 버퍼에 남겨둔다. // 정수 int n; cin >> n; // 문자열 string str; cin >> str; 위와 같이 사용이 가능하다. 이때 hello 같은 문자열이라면 문제 없이 입력을 받지만 Hello World!와 같이 띄어쓰기가 포함된 문장이라면 Hello 까지 밖에 입력이 되지 않을 것이다. cin의 >> 연산자에서는 공백문자에서 입력을 끊기 때문인데, 이러한 문제를 해결하기 위해서 getline()이라는 함수를 사용한다. # getline() getline()함수는 두 가지가 존재하는데 각가 다른 라이브러리에 존재한다. .. 2023. 2. 20.
[C ++] r-value 참조 r-value는 단순 대입 연산자의 오른쪽 항을 말한다. r-value 참조자는 기존 참조자와 달리 &가 두번 붙는다. 따라서 int 자료형에 대한 참조는 int &이지만 int 자료형에 대한 r-value 참조 형식은 int&& 이다. #include using namespace std; void Rain(int &Param) { cout 2023. 2. 20.
[C ++] 변환 생성자 '매개변수가 한 개인 생성자' 를 다른 말로 '변환 생성자' 라고도 한다. 문제는 이 변환 생성자가 은근슬쩍 호출되거나 불필요한 임시 객체를 만들어냄으로써 프로그램의 효율을 갉아먹는 원인이 된다는 것이다. #include using namespace std; // 제작자 코드 class Rain { public: // 매개변수가 하나뿐인 생성자는 형변환이 가능하다. Rain(int Param) : Data(Param) { cout 2023. 2. 4.
[C ++] 복사 생성자 복사생성자는 객체의 복사본을 생성할 때 호출되는 생성자이다. 주로 클래스 내부에서 메모리를 동적 할당 및 해제하고 이를 멤버 포인터 변수로 관리하고 있는 경우에 사용된다. 클래스이름(const 클래스이름 &rhs); #include using namespace std; class Rain { public: Rain() { cout 2023. 2. 4.
[C ++] 상수형 메소드 상수형 메서드 혹은 상수화된 메서드는 멤버 변수에 읽기 접근은 가능하나 쓰기는 허용되지 않는 메서드를 말한다. 여기서 '쓰기'란 각종 대입 연산자나 단항 연산자 등을 사용하는 것을 말한다. 선언 방법은 함수 원형 뒤에 형한정어인 const 예약어만 붙이면 된다. #include using namespace std; class RAIN { public: RAIN(int Param) : Data(Param) { }; ~RAIN() { } int GetData() const // const 예약어 { // 멤버 변수의 값을 읽을 수는 있지만 쓸 수는 없다. return Data; } int SetData(int Param) { Data = Param; } private: int Data = 0; }; int .. 2023. 2. 3.
[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.