본문 바로가기

VEDA 복습/C, C++

VEDA 9일차 - C++ 프로그래밍

반응형

 

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