[C++] try, throw, catch, Exception
·
C & C++/C++
컴퓨터 시스템이 동작하는 도중에 예상하지 못한 오류가 발생하여, 실행되고 있던 프로그램이 중지되는 것을 예외(exception)이라고 한다. 코딩을하면서 이러한 예외 상황을 처리할 수 있도록 하는 것을 예외 처리(exception handling)이라고 하는데, C++은 언어 차원에서 예외 처리 문법을 제공하여, 예외 처리하는 방식을 확장하고 관리하기 쉽도록 해준다. try, throw, catch try : 예외가 발생할 가능성이 있는 코드 블록 throw : try 문에서 발생한 오류에 대한 정보를 전달 catch : 발생한 예외에 대해 예외 핸들러가 처리할 내용을 담은 코드 블록 C++에서 예외 처리는 다음과 같은 순서로 진행된다. try문에 도달한 프로그램의 제어는 try문 내의 코드를 실행한다...
[C++] Pure Virtual Function(순수 가상 함수), Abstract Class(추상 클래스)
·
C & C++/C++
Pure Virtual Function 순수 가상함수는 구현이 없는 가상함수를 의미한다. class 클래스이름 { public: virtual void 가상함수이름() = 0; }; 구현 대신 가상함수에 NULL(0)을 대입하면 해당 함수는 순수 가상함수가 된다. 이와 동시에 순수 가상함수를 포함하는 클래스는 추상클래스로 지정된다. Abstract Class 추상 클래스가 되면 인스턴스를 만들 수 없다. 이 클래스로부터 다른 자식 클래스를 파생시켜 모든 순수 멤버 가상 함수를 오버라이드 한 뒤, 해당 자식 클래스부터 인스턴스를 다시 생성할 수 있다. 즉, 추상 클래스는 추상적인 형태만 제안하고, 실제 구현은 자식 클래스로 미루기 위해 사용된다. class Person { public: void DoAct..
[C++] multiple inheritance(다중 상속), virtual inheritance(가상 상속), virtual function(가상함수)
·
C & C++/C++
multiple inheritance class 파생클래스이름 : 접근제어지시자 기초클래스이름, 접근제어지시자 기초클래스이름[, 접근제어지시자 기초클래스이름, ...] { // 파생 클래스 멤버 리스트 } 다중 상속의 문제점 "다중 상속은 득보다 실이 많은 문법이다." 상속받은 여러 기초 클래스에 같은 이름의 멤버가 존재할 가능성이 있다. 하나의 클래스를 간접적으로 두 번 이상 상속받을 가능성이 있다. 가상 클래스가 아닌 기초 클래스를 다중 상속하면, 기초 클래스 타입의 포인터로 파생 클래스를 가리킬 수 있다. virtual inheritance 이와 같은 상속의 구조에서는 Derived class3이 Base class를 간접적으로 두 번 상속한다는 점이다. 따라서 같은 이름의 멤버 함수를 호출하려면 ..
[C++] 멤버 함수 overriding, virtual
·
C & C++/C++
Overriding 오버로딩은 서로 다른 시그니처를 갖는 여러 함수를 같은 이름으로 정의하는 것이다. 오버라이딩은 이미 정의된 함수를 무시하고 같은 이름의 함수를 새롭게 재정의하는 것이라고 할 수 있다. 멤버함수 오버라이딩 C++에서 파생 클래스는 상속을 받을 때 명시한 접근 제어 권한에 맞는 기초 클래스의 모든 멤버를 상속 받는다. 상속받은 멤버 함수는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수 있다. 오버라이딩이란 멤버 함수의 동작만을 재정의하는 것이므로, 함수의 원형은 기존 멤버 함수의 원형과 같아야 한다. 파생 클래스에서 오버라이딩의 문제점 ... void Person::ShowPersonInfo() { cout
[C++] 파생 클래스, 자식 클래스
·
C & C++/C++
inheritanc(상속) 상속은 사용자에게 높은 수준의 코드 재활용성을 제공하며, 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련한다. class inheritance(클래스 상속) C++에서 클래스 상속이란 기존에 정의되어있는 클래스의 모든 멤버 변수와 멤버 함수를 물려받아, 새로운 클래스를 작성하는 것이다. 이때 기존에 정의되어 있던 클래스를 기초 클래스 또는 부모 클래스, 상위 클래스라고 한다. 상속을 통해 새롭게 작성되는 클래스를 파생 클래스, 자식 클래스, 하위 클래스라고 한다. 상속은 다음과 같은 장점을 갖는다. 기존에 작성된 클래스를 재활용할 수 있다. 공통적인 부분은 기초 클래스에 미리 작성하여, 파생 클래스에서에서 중복되는 부분을 제거할 수 있다. derived cl..
[C++] static member, static member
·
C & C++/C++
C에서의 static 전역변수에 선언된 static 선언된 파일 내에서만 참조를 허용하겠다는 의미 지역변수(함수 내)에 선언된 static 한번만 초기화되고, 지역변수와 달리 함수를 빠져나가도 소멸되지 않는다 초기화하지 않으면 자동으로 0으로 초기화 된다 만약 C++에서 두 객체가 있을때, 각 객체가 생성될 때 마다 몇 번째로 생성된 클래스인지 알아보기위한 전역변수가 각각 cnt1, cnt2가 있다면 어떤 것이 어떤 객체를 위한 변수인지 알 수 있는 방법은 이름을 통해서 구분하는 방법뿐이다. 때문에 이러한 제한을 지켜줄 장치가 아무런 장치도 존재하지 않는다. static member(정적 멤버)와 static member(상수 멤버) static member variable C++에서 정적 멤버란 클래스..
[C++] operator overloading(연산자 오버로딩)
·
C & C++/C++
operator overloading 하나의 연산자를 여러 의미로 사용할 수 있게 하는 것이다. C++에서는 연산자 오버로딩을 사용자 정의 타입까지 확장할 수 있으며, 클래스도 하나의 타입임을 확실히 보여준다. operator function(연산자 함수) C++에서는 연산자를 오버로딩하기 위해서 연산자 함수라는 것을 사용한다. operator오버로딩할연산자(매개변수 ...) 연산자 함수는 operator 키워드를 사용하여 연산자를 오버로딩한다. 오버로딩할 연산자는 적법한 C++ 연산자이며, operator키워드와 공백 없이 연결되어 표시해야 한다. 오버로딩 제약 사항 전혀 새로운 연산자를 정의할 수 없다. ex) 몫을 나타내기 위한 %%라는 연산자를 새롭게 정의할 수 없다 기본 타입을 다루는 연산자의 ..
[C++] Constructor(생성자)와 Destructor(소멸자)
·
C & C++/C++
멤버변수의 초기화 클래스를 가지고 객체를 생성하면, 해당 객체는 메모리에 즉시 생성된다. 하지만 이 객체는 모든 멤버 변수를 초기화 하기 전에는 사용할 수 없다. 객체의 멤버 변수는 사용자나 프로그램이 일반적인 초기화 방식으로 초기화할 수 없다. 만약 pirvate 멤버를 가지고있으면 직접 접근할 수 없기 때문이다. 따라서 private 멤버에 접근할 수 있는, 초기화만을 위한 public 함수가 필요하다. Counstructor(생성자) C++에서는 객체의 생성과 동시에 멤버 변수를 초기화해주는 생성자를 제공한다. 생성자의 이름은 해당 클래스의 이름과 같다. 클래스이름(); 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다. 생성자는 반환값이 없지만, void형으로 선언하지 않는다. 객체를 초기..
WONILLISM
'C & C++/C++' 카테고리의 글 목록