C++ 33

[C++] 연산자 중복 (Operator overloading) + 프렌드(friend) 개념

연산자 중복을 배우기에 앞서 먼저 알아야 하는 개념이 있습니다. 바로 friend 라는 키워드로, 다른 언어에는 좀처럼 찾아보기 힘든 개념입니다. C++에서는 클래스 멤버로 선언하지 않아도, 멤버에 접근할 수 있도록 friend 키워드를 제공합니다. 외부에 작성된 함수를 클래스 내에 friend 키워드로 선언하여, 클래스의 멤버 함수와 동일한 접근 자격을 부여할 수 있습니다. 클래스 내에 friend 키워드로 선언된 외부 함수를 프렌드 함수(friend function) 이라고 부르며, 클래스 내에 선언할 수 있는 프렌드 함수의 개수 제한은 없습니다. 어차피 밑의 연산자 중복에서 프렌드 함수를 사용하는 예시가 많이 나오니 프렌드 함수에 대한 예시 코드는 생략하도록 하겠습니다. [목차] 1. 연산자 중복 ..

C++/C++ 기초 2023.07.13

[C++] 함수 중복과 디폴트 매개변수 (Function overloading and default parameter)

이번 포스팅은 함수 오버로딩과 디폴트 매개변수에 대해 알아보는 포스팅입니다. 오버로딩은 OOP 의 3가지 특성 중 polymorphism, 다형성(프로그램 언어 각 요소들(상수, 변수, 식, 객체, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질) 의 구현입니다. 함수 오버로딩 (function overloading) C++에서는 C와 달리 이름이 같은 함수를 여러 개 만들 수 있습니다. 같은 이름의 함수를 중복하여 정의하는 것을 함수 중복, 함수 오버로딩이라고 합니다. 예를 들어 우리가 2개의 숫자를 더해주는 함수와 3개의 숫자를 더하는 함수를 정의한다고 생각해봅시다. int sum2(int a, int b){ return a + b; } int sum3(int a, int b, i..

C++/C++ 기초 2023.07.11

[C++] static 멤버 / const 멤버

오늘은 클래스 내에서 static 으로 지정한 static 멤버와 const 멤버에 대해 알아보겠습니다. 먼저 static 부터 알아볼건데 그전에 static을 왜 쓰느냐를 알면 더 좋겠죠? static 은 객체 지향 언어의 특징 중 하나인 Encapsulation, 캡슐화에 중요한 역할을 합니다. static 을 통해 거의 모든 함수나 변수를 class 안에 선언하도록 할 수 있습니다. 쉽게 생각하면 static 변수나 함수는 전역 변수, 전역 함수와 비슷한 역할을 하는데 그 범위를 class 로 제한하는 키워드입니다. static 은 변수와 함수의 생명 주기와 사용 범위를 지정하는 방식 중 하나로, static 으로 선언된 변수와 함수의 생명 주기와 사용 범위는 아래와 같습니다. 생명 주기(life ..

C++/C++ 기초 2023.07.10

[C++ PS] 명품 C++ Programming 실습 문제 5장 풀이

명품 C++ Programming 교재 5장 함수와 참조, 복사 생성자 실습문제 풀이입니다. 개인 풀이이므로 더 효율적인 풀이가 있을 수는 있으나 문제에서 요구하는 출력 조건은 모두 맞춘 해답 코드입니다. 1. 두 개의 Circle 객체를 교환하는 swap() 함수를 call-by-reference 로 작성하라 // 실습 1번 #include #include using namespace std; class Circle { int radius; public: Circle() :Circle(1) {} Circle(int r) { this->radius = r; } void show() { cout b; bigger(a, b, big); cout

C++/PS 2023.07.10

[C++] 복사 생성자 (Copy constructor) - 얕은 복사 vs 깊은 복사

복사(Copy) 란 원본과 동일한 별개의 사본을 만드는 것으로 정의되는데, 크게 2가지로 나뉩니다. 복사의 2가지 차이를 먼저 알아야 복사 생성자를 이해할 수 있기 때문에 이 분류에 대해 먼저 다뤄보겠습니다. 얕은 복사 vs 깊은 복사 (Shallow copy vs Deep copy) 얕은 복사와 깊은 복사의 차이점은 객체의 멤버 변수에 동적 메모리가 할당된 경우 나타나게 됩니다. 얕은 복사(Shallow copy) 객체 복사 시, 객체의 멤버를 1:1로 복사 객체의 멤버 변수에 동적 메모리가 할당된 경우 → 사본과 원본이 동일한 동적 메모리 공유 깊은 복사(Deep copy) 객체 복사 시, 객체의 멤버를 1:1로 복사 객체의 멤버 변수에 동적 메모리가 할당된 경우 → 사본은 원본이 가진 메모리 크기만..

C++/C++ 기초 2023.07.09

[C++] 참조 매개 변수 / 참조 리턴 (Reference parameter / Reference return) + Call-by-reference

참조 매개 변수와 참조 리턴을 이해하기 위해서는 프로그래밍 언어의 인자 전달 방식(argument passing) 에 대해 복습해야합니다. https://blog.naver.com/songsite123/222938354059 두 변수의 값 서로 바꾸기(Call-by-value/reference) 위 포스팅의 내용을 알아야 오늘의 내용이 쉽습니다. 프로그래밍을 하다 보면 두 변수의 값을 바꿔야 할 일... blog.naver.com 이전에 C 언어에서 다룰 때는 2가지로 구분하여 인자 전달 방식을 배웠습니다. 그 때의 용어와 오늘 다루게 될 용어가 다르니 혼돈하면 안됩니다. 위 포스팅에서는 Call by value (값에 의한 호출) / Call by reference (주소에 의한 호출) 을 2가지로 구..

C++/C++ 기초 2023.07.09

[C++ PS] 명품 C++ Programming 실습 문제 4장 풀이

명품 C++ Programming 교재 4장 객체 포인터와 객체 배열, 객체의 동적 생성 실습문제 풀이입니다. 개인 풀이이므로 더 효율적인 풀이가 있을 수는 있으나 문제에서 요구하는 출력 조건은 모두 맞춘 해답 코드입니다. 1. Color 클래스를 선언하고 활용하는 코드를 완성시켜라. red, green, blue 는 0 ~ 255의 값만 가진다. // 실습 1번 #include using namespace std; class Color { int red, green, blue; public: Color(int r = 0, int g = 0, int b = 0) { red = r; green = g; blue = b; } void setColor(int r, int g, int b) { red = r; ..

C++/PS 2023.07.07

[C++] 동적 메모리 할당 : new / delete 연산자

동적 메모리 할당(Dynamic Memory Allocation) 및 해제 동적 메모리 할당을 알아보기에 앞서 정적 메모리 할당의 한계점을 하나 짚고 넘어가겠습니다. 앞선 포스팅... blog.naver.com C 언어에서는 malloc() 이나 free() 와 같은 표준 C 함수를 이용해 동적 메모리 할당 및 반환을 했습니다. 위 포스팅에 동적 메모리 할당과 반환은 무엇을 의미하는지 C 언어 기준으로 더 상세히 설명해놨습니다. C++ 에서는 new 와 delete 연산자를 통해 동적 메모리 할당/반환을 수행합니다. new 연산자는 힙 으로부터 메모리를 할당 받고, delete 연산자는 할당 받은 메모리를 힙으로 반환합니다. 기본 자료형 동적 할당/반환 기본 형식은 다음과 같습니다. 데이터타입 *포인터변..

C++/C++ 기초 2023.07.06

[C++] 문자열 관련 함수 : string 클래스 정리 및 사용법

[목차] 1. keyboard 입력 : getline(cin, address, '\n' : cin.getline(address, 크기, '\n'); 1번 키보드 입력 관련 자세한 내용은 ↓ 아래 포스팅에 나와 있습니다. [C++] 기본 입출력 ( 화면 출력 / 키 입력받기 / 문자열 입력받기 ) [목차] 1. 화면 출력 2. 키 입력 받기 (cin) 3. 문자열 입력 받기 cin.getline() 을 이용해 받는 방법 : 배열로 문자열 저장하는 경우 getline() 을 이용해 받는 방법 : string 객체 사용하는 경우 화면 출력 - co songsite123.tistory.com 2. 문자열 함수 문자열의 크기 ( .size(), .length(), .capacity() ... ) 조작함수 ( .a..

C++/C++ 기초 2023.07.05

[C++ PS] 명품 C++ Programming 실습 문제 3장 풀이

명품 C++ Programming 교재 3장 클래스와 객체 실습문제 풀이입니다. 개인 풀이이므로 더 효율적인 풀이가 있을 수는 있으나 문제에서 요구하는 출력 조건은 모두 맞춘 해답 코드입니다. Open Challenge 지수 표현 클래스 만들기. 실수의 지수 표현을 클래스 Exp로 작성하라. Exp.h 헤더 파일과 Exp.cpp 파일로 분리하여 작성하라. // Open challenge. Exp.cpp 파일 #include using namespace std; #include "Exp.h" int main() { Exp a(3, 2); Exp b(9); Exp c; cout

C++/PS 2023.07.04
728x90