본문 바로가기
320x100

Blog189

[C++]예외처리(Exception Handling) 코드를 작성하다 보면 다양한 예외(Exception) 상황들을 만날 수 있다. 이런 코드를 작성한다고 하면, 실행 시 0을 입력하게 될 경우 division by zero라는 예외가 뜨면서 프로그램이 종료된다. 그렇다면 C++에서 예외처리는 어떻게 하는 것일까? 예외처리는 기본적으로 try-catch 문을 이용한다. try-catch문 try { (예외가 발생할 수 있는 코드) if (예외가 발생할 조건) throw 변수; } catch (변수타입 변수이름) { (예외를 처리하는 코드) } try-catch 문의 구조이다. 예외가 발생할 수 있는 코드를 try 안에 넣고, if를 사용하여 예외를 걸러내여 catch 에서 처리하면 된다. throw로 변수를 던지게 되는데, 이때 일치하는 변수타입의 catc.. 2020. 12. 16.
[C++]복사 생성자(Copy Constructor) 얕은 복사와 깊은 복사 C++ 의 복사에는 두가지 개념이 존재한다. 하나는 얕은 복사(swallow copy) 그리고 하나는 깊은 복사(deep copy) 이 둘은 복사할 때 메모리의 할당에서 차이점이 존재한다. 먼저 얕은 복사의 경우는 동적 할당을 받은 변수의 주소값을 공유한다. 즉 포인터 변수를 얕은 복사할 경우 새로운 포인터 변수는 기존 주소값을 가리키게 된다. 깊은 복사는 새로운 동적 할당을 만들고, 원본에 있는 데이터까지 복제한다. 일단 얕은 복사의 문제점 #include using namespace std; class MyArray { public: int size; int* data; MyArray(int size) { this->size = size; data = new int[size];.. 2020. 12. 15.
[C++]연산자 중복(연산자 오버로딩) 연산자 중복이란 무엇인가? 연산자 중복은 C++ 에서 제공하는 기본적인 자료형들(예를 들어 int, double, float)말고 다른 클래스에도 연산자를 이용할 수 있도록 하는 문법이다. string 클래스도 이미 연산자 중복이 적용되어 있다. string은 + 연산자를 통해 s1과 s2를 이어붙이는 역할을 한다. 어떻게 작동하는가? 만약 내가 어떤 객체 v1, v2에 대해 v1 + v2라고 쓴다면, 컴파일러는 이를 v1.operator+(v2) 의 형태로 호출하여 반환값을 반환한다. 어떤 연산자에 대해 작동하는가? +,-,++(전위, 후위),--(전위, 후위),=,==,[],* 등등 다양한 연산자를 오버로딩하여 사용할 수 있다. 예시) #include #include using namespace st.. 2020. 12. 14.
[C++]업캐스팅과 가상함수, 순수가상함수 업캐스팅이란? 클래스 객체를 기반 클래스(부모 클래스)로 변환하는것 -> 다형성 구현을 위해 필요 기본적으로는 업캐스팅 시 원래 자식 클래스의 메소드는 접근이 불가능 그러나 virtual 키워드를 통해 부모 클래스에서 가상 함수임을 지정해주면 자식 클래스의 해당 함수에 접근이 가능하다. 이는 컴파일시 호출될 함수를 결정하는 정적 바인딩(static binding) 이 아닌 런타임시 호출할 함수를 결정하는 동적 바인딩(dynamic binding)을 사용하기 때문이다. 이렇게 클래스를 생성할 때 부모 클래스의 메소드에 virtual 키워드를 붙이지 않는다면, parent 포인터에 자식 객체를 담고 WhatIsMe() 함수를 호출해도 부모 클래스의 메소드가 호출된다. 그런데 만약 virtual 키워드를 부모.. 2020. 12. 13.