반응형

42Seoul 27

[C++] 42SEOUL CPP04 개념 공부하기

(42Seoul의 CPP04 과제를 진행하며 공부한 내용을 작성한 TIL을 정리한 글 입니다.)개념 공부📓가상 함수가상함수는 ‘virtual’ 키워드를 사용하여 선언한 함수를 의미가상 함수 테이블은 대체로 아래 순서로 구현됨‘virtual’ 키워드를 사용하여 가상 함수 선언클래스에 대한 가상 함수 테이블을 생성함. 가상 함수 테이블은 가상 함수들에 대한 포인터들의 배열객체에 가상 함수 테이블 포인터를 추가하여, 해당 클래스의 가상함수 테이블을 가리키게 함가상함수 호출 시, 해당 클래스의 가상 함수 테이블 포인터를 따라가 적절한 가상 함수를 찾아 호출가상 소멸자클래스 상속 시, 해당 클래스의 소멸자도 가상 소멸자로 선언해야 함가상 소멸자로 선언하지 않으면, 해당 클래스를 동적으로 할당하고 삭제 시, 메모..

C++ 2023.07.28

[C++] 42SEOUL CPP03 개념 공부하기

(42Seoul의 CPP03 과제를 진행하며 공부한 내용을 작성한 TIL을 정리한 글 입니다.)개념 공부📓클래스 상속기존 클래스의 특성과 기능을 새로운 클래스가 물려받는 것상속을 통해 기존 클래스의 멤버 변수와 멤버 함수를 그대로 사용하거나, 새로운 멤버 변수와 멤버 함수를 추가하여 새롭게 정의할 수 있음상속을 통해 만들어진 새로운 클래스를 ‘파생 클래스’ 또는 ‘하위 클래스’ 라고 하며, 기존 클래스는 ‘기본 클래스’ 또는 ‘상위 클래스’ 라고 함클래스 상속 방법class BaseClass { // 기본 클래스의 멤버 변수와 멤버 함수 선언}class DerivedClass : access-specifier BaseClass { // 파생 클래스의 멤버 변수와 멤버 함수 선언}BaseClass : 기..

C++ 2023.07.28

[C++] 42SEOUL CPP02 개념 공부하기

(42Seoul의 CPP02 과제를 진행하며 공부한 내용을 작성한 TIL을 정리한 글 입니다.) 개념 공부📓 Orthodox Canonical Form OCCF 란, 클래스의 기본적인 형식 또는 일반적인 형식을 따르는 규칙 집합 이 규칙들은 클래스의 일관성과 호환성을 유지하고, 예기치 않은 동작을 방지하는데 도움을 줌 C++ 98 버전의 OCCF 는 아래 규칙을 포함함 기본 생성자(Default Constructor) 복사 생성자(Copy Constructor) 소멸자(Destructor) 대입 연산자(Assignment Operator) 동등 연산자(Equality Operator) 복사 할당 연산자(Copy Assignment Operator) ostream 연산자(’’) 오버로딩 42 과제에서는 위..

C++ 2023.07.28

[C++] 42SEOUL CPP01 개념, 함수 공부하기

(42Seoul의 CPP01 과제를 진행하며 공부한 내용을 작성한 TIL을 정리한 글 입니다.) 함수 공부📓 new 포인터 변수명 = new 타입; //int *ptr = new int; 포인터 변수명{new 타입}; //int *ptr{new int}; //초기화 같이 하는 방법 포인터 변수명 = new 타입(초기화 값); //int *ptr = new int(10); 포인터 변수명{new 타입}; //int *ptr{new int(10)}; 메모리 공간 할당하는 연산자이며, 생성자를 호출하고, 할당하고자 하는 자료형에 맞게 형 변환 new 는 바로 초기화가 가능함 메모리 할당 실패 시, malloc 과는 다르게 bad_alloc 이라는 익셉션을 리턴함. try - catch 문을 사용해서 확인해야 한..

C++ 2023.07.28

[TIL] 20230727

오늘 공부한 내용📓 - C++ 개념 공부 클래스 포워드 선언(Forward Declaration) 포워드 선언이란, 클래스의 선언을 미루어서 순환참조를 피하는 방법 순환참조는 A.hpp 파일과 B.hpp 파일에서 서로를 include 하는 상황에서 발생하는 에러 //A.hpp #include "B.hpp" class A { //클래스 내용 } //B.hpp #include "A.hpp" class B { //클래스 내용 } 컴파일러가 클래스를 정확히 인식하지 못하여 에러가 발생함 클래스의 멤버 변수나 멤버 함수를 선언하지 않고, 클래스의 이름만을 미리 선언하는 방법 해당 클래스를 사용하는 코드에서는 클래스의 세부 구현을 알 필요 없이 클래스의 포인터나 참조를 사용할 수 있음 클래스의 멤버 변수나 멤버 함..

TIL::Today I Learn 2023.07.28

[TIL] 20230726

오늘 공부한 내용📓 - C++ 개념 공부 추상화(Abstract) 객체의 공통적인 특징과 기능을 하나의 추상 클래스로 표현하는 것 실제로 구현되지 않은 순수한 가상 함수들을 가지고 있는 추상 클래스를 의미 추상 클래스는 인스턴스를 생성할 수 없으며, 그 자체로 완전한 클래스가 아님 추상 클래스는 단지 인터페이스 역할이며, 이를 상속받은 파생 클래스에서 정의된 순수 가상 함수들을 반드시 구현하여야 함. 이를 통해 다형성을 구현하는 기반을 마련하고, 다른 클래스들 간의 공통된 인터페이스를 정의하여 객체 지향 프로그래밍의 유연성과 재사용성을 증가 추상 클래스를 정의하기 위해서는 하나 이상의 순수 가상 함수를 포함해야 함 순수 가상 함수(pure virtual function)는 ‘virtual’ 키워드와 함께..

TIL::Today I Learn 2023.07.28

[TIL] 20230723

오늘 공부한 내용📓 - C++ 개념 공부 가상 소멸자 클래스 상속 시, 해당 클래스의 소멸자도 가상 소멸자로 선언해야 함 가상 소멸자로 선언하지 않으면, 해당 클래스를 동적으로 할당하고 삭제 시, 메모리 누수나 undefined behavior 문제가 발생할 수 있음 부모클래스에서 가상 소멸자로 선언되지 않는다면, 자식 클래스의 객체를 가리키는 포인터가 삭제될 때 부모 클래스의 소멸자만 호출됨. 자식 클래스의 소멸자는 호출되지 않아 메모리 누수 발생함 const Animal* j = new Dog(); 위 상황은 업캐스팅(Upcasting) 이라고 하며, 파생 클래스의 객체를 기본 클래스의 포인터 또는 참조형으로 변환하는 것 위 코드처럼 부모 클래스인 Animal 클래스의 포인터인 j 에 Dog 클래스의..

TIL::Today I Learn 2023.07.28

[TIL] 20230721

오늘 공부한 내용📓 - C++ 개념 공부 다이아몬드 상속 하나의 클래스가 두개 이상의 클래스로부터 상속 받는 구조 A / \ B C \ / D 다이아몬드 상속에는 D 클래스에서 A 클래스의 멤버 변수나 멤버 함수에 접근할 때, B나 C 중 어떤 클래스를 기반으로 하는지 모호하다는 문제가 있어 잘 사용하지 않는 상속 방법 C++ 에는 다이아몬드 문제를 해결하기 위해 가상 상속을 지원함. 가상상속은 다이아몬드 상속 구조에서 공통된 기본 클래스를 가상으로 상속하여, 다이아몬드 구조를 일반적인 트리구조로 바꿔주는 기법 virtual 키워드를 사용하여 공통된 클래스를 가상으로 상속 class A { // ... }; class B : virtual public A { // ... }; class C : virtu..

TIL::Today I Learn 2023.07.28

[TIL] 20230719

오늘 공부한 내용📓 - C++ 개념 공부 클래스 상속 기존 클래스의 특성과 기능을 새로운 클래스가 물려받는 것 상속을 통해 기존 클래스의 멤버 변수와 멤버 함수를 그대로 사용하거나, 새로운 멤버 변수와 멤버 함수를 추가하여 새롭게 정의할 수 있음 상속을 통해 만들어진 새로운 클래스를 ‘파생 클래스’ 또는 ‘하위 클래스’ 라고 하며, 기존 클래스는 ‘기본 클래스’ 또는 ‘상위 클래스’ 라고 함 클래스 상속 방법 class BaseClass { // 기본 클래스의 멤버 변수와 멤버 함수 선언 } class DerivedClass : access-specifier BaseClass { // 파생 클래스의 멤버 변수와 멤버 함수 선언 } BaseClass : 기본 클래스 DerivedClass : 파생 클래스로..

TIL::Today I Learn 2023.07.28
반응형