전체 글 85

[C++] 파생 클래스와 기본 클래스의 생성자/소멸자 호출 관계 + 가상 소멸자

[C++] 생성자와 소멸자 ( Constructor and Destructor ) 포스팅의 목차 / 링크 1. 생성자 (Constructor) 2. 디폴트 생성자 (Default Constructr) 3. 복사 생성자 (Copy Constructor) 4. 소멸자 (Destructor) 5. 생성자/소멸자 실행 순서 클래스를 통해 객체를 생성하면, 해당 객 songsite123.tistory.com 클래스는 생성자와 소멸자가 최소 1개씩 있으며, 객체의 생성과 호출에 생성자와 소멸자가 각각 실행되는 걸 위 포스팅에서 배웠습니다. 오늘 포스팅은 상속에 초점을 맞추어 파생 클래스의 객체가 생성되거나 소멸 될 때, 기본 클래스의 생성자와 소멸자가 호출되는지, 파생 클래스의 생성자와 소멸자가 호출되는지, 그 사..

C++/C++ 기초 2023.07.17

[C++] 가상 함수와 오버라이딩 ( Virtual function and overriding )

오버라이딩이란, 부모 클래스로부터 상속받은 메소드의 내용을 재정의(변경) 해야 하는 것을 오버라이딩이라고 합니다. 다른 말로 파생 클래스에서 기본 클래스에 작성된 가상 함수를 재작성하여 기본 클래스에 작성된 가상 함수를 무력화 시키고, 파생 클래스에서 재작성한 함수를 사용하는 것입니다. 무슨 소리이고 이런 걸 왜 하나 싶으실텐데, 하나의 예시를 들어보겠습니다. 우리가 자동차를 하나 샀습니다. 자동차를 샀으면 우리는 운전을 하겠죠? 운전을 하기 위해 '엑셀' 과 '브레이크' 라는 것을 통해 운전을 하게 될 겁니다. 이를 간단히 클래스로 표현해보면 class Car{ int speed; public: virtual void Accelerator() {} virtual void Break() {} ... } ..

C++/C++ 기초 2023.07.17

[C++] 상속 (Inheritance) - 업캐스팅/다운캐스팅 (Up/Down casting)

상속 (Inheritance) 는 객체 지향 언어의 가장 중요한 특성 중 하나입니다. 상속을 통해 소프트웨어의 재사용이 가능해지고, 동적 바인딩을 통해 객체 지향 프로그래밍을 할 수 있고 계층적으로 프로그램을 관리할 수 있습니다. C++ 에서의 상속은 두 클래스 사이의 부모-자식(기본-파생) 상속 관계를 의미합니다. 상속 (객체 지향 프로그래밍) - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 객체 지향 프로그래밍(OOP)에서, 상속(inheritance)은 객체들 간의 관계를 구축하는 방법이다. 클래스로 객체가 정의되는 고전 상속에서, 클래스는 기반 클래스, 수 ko.wikipedia.org 상속의 정의는 위 링크를 참조해주세요. 예제 코드 위주로 상속을 알아보겠습니다. #incl..

C++/C++ 기초 2023.07.17

[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
728x90
반응형