C++

· C++
들어가면서 기본적으로 연산자는 다음 코드와 같이 기본타입에 대해서는 어떻게 연산할지 규칙이 정해져있다. int a = 5; int b = 10; int result = a + b; //15 하지만, 다음 코드를 보면 사용자 정의의 타입인 Tmp 클래스 타입간의 + 연산은 에러가 발생할 것이다. Tmp t1{ 5 }; Tmp t2{ 10 }; Tmp result = t1 + t2; //에러! 따라서, 이번 글에서는 사용자 정의의 클래스 타입간의 연산을 오버로딩(재정의) 하는 방법에 대해 알아볼 예정이다. 연산자 오버로딩 연산자 오버로딩은 다음 코드와 같이 클래스 내부에서 멤버함수처럼 정의하면 된다. 다만, 함수명 대신에 operator 키워드와 오버로딩할 연산자를 적어 놓으면 된다. class ... { ..
· C++
들어가면서이번 글은 아래 글의 후속편이다. this 포인터에 대해 잘 모르겠으면 아래 글을 보고 다시 오자! https://logicallaw.tistory.com/entry/C-클래스-내부의-this-포인터의-역할 C++ : 클래스 내부의 this 포인터의 역할(this->멤버, (*this).멤버)this 포인터 클래스 내부에서 this 포인터는 모든 멤버함수의 default 매개변수이다. (자세히 말하면, friend 함수를 제외하고 모든 멤버함수에 존재한다.) 즉, 모든 멤버함수(또는 생성자)에서 this 포logicallaw.tistory.comCascaded Function Calls이란?Cascaded Function Calls는 멤버함수 체이닝 또는 연쇄호출이라고 불리기도 한다.(이하 멤버..
· C++
this 포인터 클래스 내부에서 this 포인터는 모든 멤버함수의 default 매개변수이다. (자세히 말하면, friend 함수를 제외하고 모든 멤버함수에 존재한다.) 즉, 모든 멤버함수(또는 생성자)에서 this 포인터를 사용할 수가 있다. this 포인터는 기본적으로 해당 객체의 주소를 가리키게 된다. 따라서, 클래스 내부에서 this 포인터로 private 멤버에 접근할 수 있게 되는데 this 포인터 사용법에 대해 아래 예제와 함께 살펴보도록 하자. #include using namespace std; class Tmp{ private: int x = 0; public: explicit Tmp(int num) : x { num } {} void print() const { cout
· C++
들어가면서 클래스 생성자의 종류는 여러가지이다. 기본생성자부터 시작해 매개변수가 있는 생성자(이하 매개변수 생성자), 복사생성자, 이동생성자, 그리고 변환생성자가 존재한다. 변환생성자는 매개변수 생성자와 유사한 점이 있어서 혼동하기 쉬운 개념인데 이번 글에서 명확하게 구분하고 가자. 변환생성자란? 변환생성자는 단일 매개변수를 갖는 생성자로, 다른 타입의 값을 해당 클래스 타입으로 변환할 때 호출되는 생성자(멤버 함수)이다. 이해를 쉽게 하기 위해 아래 예제를 먼저 살펴보도록 하자. int number = 10; int 타입의 number는 대입연산자(=)에 의해 10을 변수 number에 할당하고 있는 모습이다. 이때, 대입연산자(=)는 오른쪽의 값을 왼쪽에 할당하는게 포인트이다. 그렇다면, 아래 예제에..
· C++
들어가면서 클래스를 공부하다보면 심화 개념으로 friend 키워드를 공부해야하는 상황이 있다. 오늘은 간단하게 friend 키워드의 개념과 특징을 살펴보도록 하자. friend 키워드란? 경우에 따라서 클래스간 멤버를 공유해야하는 상황이 생기기도 한다. 이때, friend 키워드를 사용하면 클래스간 멤버를 접근하고 공유할 수 있게 된다. 말 그대로 friend 키워드는 클래스간 친구를 할 수 있게 되어서 private에 정의된 멤버도 접근할 수 있게 된다. friend 키워드의 특징 클래스 내부에서 friend 키워드를 멤버 함수에 사용하면 해당 멤버 함수는 멤버함수가 아닌 외부 함수로 인식된다. 따라서, 해당 함수는 비클래스 범위로 내보내져서 객체 생성(객체 인스턴스)과 무관하게 존재하며 호출 될 수가..
· C++
들어가면서 먼저 '배열의 선언 및 초기화 문법'에 대해 알아보고 'int 배열과 char 배열의 초기화 특징'과 'cin으로 입력 받는 char 배열과 int 배열'에 대해 알아보도록 하자. 배열의 선언 및 초기화 문법 1.배열도 변수와 동일하게 최초 할당된 저장 공간에는 쓰레기 값이 저장되어 있다. 2.그러므로, 배열도 선언과 동시에 초기화해야만 한다. 3.최초 배열 초기화는 중괄호({})로 묶어 초기화한다. 단, 이후 초기화는 배열 요소 각각에 대입하여 초기화 해야한다. 선언과 초기화를 동시에 했을 때처럼 한 번에 중괄호 초기화는 불가능하다. int 배열과 char 배열의 초기화 특징 먼저, 기본적으로 배열 초기화는 선언과 동시에 초기화할 때는 중괄호 초기화가 가능하다. #include using n..
· C++
들어가면서 본격적으로 클래스를 공부하다보면 정적 멤버변수(static data member)를 사용하는 상황이 존재한다. 기본적으로 정적 멤버변수의 개념을 알고 있어야 클래스에서도 선언할 수 있기 때문에, 이 개념에 대해 잘 모른다면 아래 글을 참고해보자. https://logicallaw.tistory.com/109 C++ : 정적 지역변수(static local variable)란? 들어가면서 C++ 프로그래밍을 하다보면, 전역변수 개념과 더불어 정적 지역변수라는 개념이 등장하고는 한다. 이번 글에서는 정적 지역변수의 개념을 알아보도록 한다. 정적 지역변수란? 정적 logicallaw.tistory.com 정적 멤버변수와 정적 멤버함수란? 정적 멤버변수란, 클래스 내부에서 static을 붙여서 선언된..
· C++
들어가면서 C++ 프로그래밍을 하다보면, 전역변수 개념과 더불어 정적 지역변수라는 개념이 등장하고는 한다. 이번 글에서는 정적 지역변수의 개념을 알아보도록 한다. 정적 지역변수란? 정적 지역변수는 일반적으로 변수 선언시 앞에 static이라는 키워드를 붙이고 선언한다. static int a = 5; 보통 정적 지역변수는 함수 내부에서 선언되는 변수로서 다음 세 가지 특징을 가지고 있다. 1.선언된 함수 내부에서만 접근이 가능하다. -즉, 다른 블록(스코프)에서는 해당 변수를 사용하거나 초기화할 수 없다. 2.프로그램이 시작하면 생성되고 종료되면 소멸한다. -이 말은 처음 들으면 이해하기 어려워서 아래 코드와 함께 살펴보도록 하자. 3.초기화 문장은 한 번만 실행된다. -해당 함수에서 초기화는 한 번만 ..
· C++
들어가면서 반복문 속의 조건문을 사용하다가 보면 어느 특정 순간에 반복문을 멈추거나 아니면 해당 조건일 때만 건너뛰게 하고 싶은 경우가 있을 것이다. 이번 글은 continue와 break의 차이를 살펴보고 둘 중 누가 특정 시점에 반복문을 멈추거나 특정 조건에 건너뛰는지 살펴보도록 한다. 반복문 속 조건문의 break란? 아래 코드와 살펴보겠다. #include using namespace std; int main(void) { int cnt = 0; while (cnt < 30) { if (cnt == 15) { cnt++ break; //break:이후코드 실행안하고 다시 올라가지 않고 while문 강제종료 } cout
· C++
들어가면서 일반적으로 우리는 변수를 선언과 동시에 초기화할 때 다음 코드처럼 할 것이다. #include using namespace std; int main(void) { int a = 10; cout
logicallaw
'C++' 카테고리의 글 목록