C++ 예외 처리
try - catch - throw : 조건문과 return 문을 이용해 예외를 처리하기 어려운 경우 사용
try{
//처음 동작
throw ~~~; //예외 발생 : 데이터의 타입에 따라서 catch 문이 구분된다.
} catch(예외_형식 예외_이름){
//예외 발생 시 동작
} catch(...){
//throw가 발생하였지만 사용자가 특별하게 정의하지 않은 경우 사용, else와 비슷
}
throw가 발생 시 같은 범위에서 catch로 우선 처리 -> 같은 범위의 catch가 없다면 상위 호출부에서 catch 처리(Stack Unwinding)
assert(단언하다)
/*사용 형식*/
assert(condition) // ***condition은 다른 코드에 영향을 주지 않아야 한다.
assertion : 코드를 검증하여 예상치 못한 상황에서 프로그램 동작을 중단시키는 도구(안정성과 신뢰성을 높여준다)
디버깅 모드에서 사용
디버그 모드 : 컴파일할 때 디버깅을 위한 정보들을 삽입, 문제 원인을 수월하게 찾을 수 있음
릴리즈 모드 : 사용자에게 배포되는 코드를 만들 때 사용, 디버깅 정보, 심벌, 주석 등을 지우는 최적화 작업이 들어감
noexcept : 함수가 예외를 더 할 수 있다.
set_terminate : 프로그램 강제 종료 전 동작 정의
객체지향과 클래스
객체지향 이전 : 구조적 프로그래밍( ie) C ) -> 함수를 이용하여 기능 구현
- C : 구조적 프로그래밍 = 데이터 구조(struct, array etc) + 알고리즘(function ie) swap(), sort())
- C++ : 객체 지향형 프로그래밍 = 클래스(= 데이터 구조(멤버) + 알고리즘(멤버 함수, 메쏘드)) -> 생산성 부문에서 구조적 프로그래밍보다 좋다.
C++의 클래스는 struct와 비슷하다.
객체지향 프로그래밍(OOP, OOD)의 4 가지 특징
- abstraction(추상화)
- encapsulation(캡슐화)
- inheritance(상속)
- polymorphism(다형성)
has-a 관계 : 상호 교환이 성립되지 않는 관계 (자동차 - 엔진)
is-a 관계 : 하위 객체가 사위 객체를 대신할 수 있는 관계 (상속 관계)
클래스와 인스턴스
- 클래스 = 구조체의 업그레이드 버전 : 데이터와 함수를 포함하는 논리 단위
- 객체, 인스턴스(instance) = 실제로 클래스가 메모리에 할당된 것 : 특정 클래스를 사용할 수 있도록 만든 변수
//클래스 예시
class Car
{
int fuel; //default : private
public: //메서드나 함수를 외부에서 호출하기 위해서는 public
Car(int fuel); // 생성자
~Car(); //소멸자
int drive(int accel);
int getFuel();
private: //내부 접근만 허용됨
};
Car::Car(int fuel) {
this->fuel = fuel;
}
Car:: ~Car() {
}
int Car::getFuel() const { //맴버 변수들을 바꾸지 못하게 한다. 읽기만 하겠다.
return this->fuel;
}
virtual function : 기본 클래스 내에서 선언되어 파생 클래스에 의해 재정의되는 맴버 함수
- 공개 섹션에 선언
- static일 수 없으며, 다른 클래스의 friend 함수가 될 수 없음
- 기본 클래스의 포인터 또는 참조를 통해 접근
- 프로토타입(반환형, 매개변수)는 동일할 것
- 가상 소멸자는 가능하지만 가상 생성자는 불가
friend class : friend로 선언된 다른 클래스의 private, protected 맴버에 접근할 수 있다.
#include <iostream>
#include <string>
using namespace std;
class Friend1 {
private :
string name;
friend class Friend2;
};
class Friend2{
public :
void set_name(Friend1& f, string s) {
f.name = s;
}
void show_name(Friend1& f) {
cout << f.name << "\n";
}
};
int main(void) {
Friend1 f1;
Friend2 f2;
f2.set_name(f1, "열코");
f2.show_name(f1);
return 0;
}
출처: https://yeolco.tistory.com/116 [열코의 프로그래밍 일기:티스토리]
'VEDA 복습 > C, C++' 카테고리의 다른 글
VEDA 11일차 - C++ (0) | 2025.03.31 |
---|---|
VEDA 10일차 - C++ (0) | 2025.03.28 |
VEDA 8일차 - C/C++ 보충 (0) | 2025.03.26 |
VEDA 7일차 - C++ 프로그래밍 (0) | 2025.03.25 |
VEDA 6일차 - C 프로그래밍 (0) | 2025.03.24 |