반응형

TIL::Today I Learn 32

[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

[TIL] 20230718

오늘 공부한 내용📓 - C++ 개념 공부 신발끈 공식 삼각형의 넓이를 구하는 공식 중 하나 (다각형도 가능) 삼각형의 반시계 방향으로 점 P1, P2, P3 이 있을 때, 붉은 화살표로 이어진 것끼리 곱한 뒤 모두 더하고, 초록 화살표로 이어진 것끼리 곱한 뒤 뺀 후, 절댓값을 구하면 그것이 넓이가 됨 위 내용으로 정리한 수식 참고자료 https://chemicals1234.tistory.com/18 제가 공부한 내용을 기록하고 있습니다. 혹시 수정이 필요한 부분이 있다면, 댓글로 지적 부탁드립니다! 선한 관심과 도움 감사드립니다😊

TIL::Today I Learn 2023.07.28

[TIL] 20230708

오늘 공부한 내용📓 - C++ 개념 공부 고정소수점 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해두고, 해당 비트만 사용하여 숫자를 표현하는 방식 한정된 비트에 정수와 소수를 표현해야하기 때문에, 나타낼 수 있는 범위가 한정적인 문제 아래 처럼 32비트를 쪼개 실수를 표현 [ 1 ][ 15 ][ 16 ] [sign][integer part][fractional part] 처음 1 비트는 sign(부호) 이며, 양수는 0 음수는 1 다음 15 비트를 integer(정수부) 다음 15 비트를 fractional(소수부) 정수부에 정수값을 2진수로 바꾸어 넣고, 소수부에 소수값을 2진수로 바꾸어 넣은 후, 남은 자리는 0으로 채움 부동소수점 소수점의 위치를 고정하지 않고, 그 위치를 나타내는..

TIL::Today I Learn 2023.07.18

[TIL] 20230707

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

TIL::Today I Learn 2023.07.08

[TIL] 20230705

오늘 공부한 내용📓 - C++ 개념 공부 if/else 문 사용하지 않고 분기 처리하기 ex05 문제에서 if/else 문을 사용하지 않고 분기하여, 멤버 함수 포인터 배열을 통해 함수를 실행 시켜야 한다. if/else 문을 사용하지 말라는 점이, 분기가 엄청 많아질 경우에는 if/else 문은 관리가 힘드니 사용하지 말라는 것으로 이해하여, 대안인 switch 문은 사용하지 않고 코드를 짜보려고 한다. complain 함수의 인자로 level이 들어오면, 그 level 에 맞는 함수를 실행시켜야 하기 때문에, levels 배열을 만들어 find 로 level 을 찾고, 그 인덱스를 사용하여 멤버 함수 포인터 배열에서 함수를 실행시킨다. void Harl::complain(std::string leve..

TIL::Today I Learn 2023.07.06

[TIL] 20230704

오늘 공부한 내용📓 - C++ 개념 공부 함수 포인터와 멤버 함수 포인터 함수 포인터 함수의 주소를 저장하고 호출하는 포인터 int add (int a, int b) { return a + b; } int subtract (int a, int b) { return a - b; } int main() { int (*funcPtr)(int, int); //함수 포인터 선언 funcPtr = add; // add 함수를 가리키도록 초기화 int result = funcPtr(5, 3); //함수 포인터를 통한 함수 호출 std::cout

TIL::Today I Learn 2023.07.06
반응형