본문 바로가기

C++20

[C++] 상속, 생성자/소멸자 호출 순서, 다형성, 정적/동적 바인딩, 가상 소멸자 본 내용은 POCU COMP3200: C++ 언매니지드 프로그래밍 강의를 토대로 작성하였습니다. 상속 다른 클래스의 특성들을 내려 받음 베이스(base) 클래스 부모 클래스 파생(derived) 클래스 자식 클래스 파생 클래스의 개체는 다음 것들을 가짐 베이스 클래스의 멤버 변수 베이스 클래스의 멤버 메서드 자신의 생성자와 소멸자 파생클래스는 멤버 변수 및 메서드 추가가능 파생 클래스의 접근 제어자 Java와 달리 상속 시 베이스 클래스 멤버의 접근수준을 결정할 수 있다 public 상속 private 상속 protected 상속 생성자 호출 순서 베이스 클래스의 생성자가 먼저 호출 됨 명시적 또는 암시적으로 그 다음으로 파생 클래스의 생성자가 호출 됨 부모 클래스의 특정 생성자를 호출 할 때는 초기화 .. 2022. 3. 9.
[C++] 복사 생성자, 함수 오버로딩, 연산자 오버로딩, friend 키워드 본 내용은 POCU COMP3200: C++ 언매니지드 프로그래밍 강의를 토대로 작성하였습니다. 복사 생성자 받는 매개변수가 const 나 자신 클래스 같은 클래스에 속한 다른 개체를 이용하여 새로운 개체를 초기화 같은 크기, 같은 데이터 이건 종이 위에 쓸 수 있을 정도로 숙련하기 암시적(implicit) 복사 생성자 코드에 복사 생성자가 없는 경우, 컴파일러가 암시적 복사 생성자를 자동 생성 암시적 복사 생성자는 얕은 복사(shallow copy)를 수행 멤버 별 복사 각 멤버의 값을 복사함 개체인 멤버변수는 그 개체의 복사 생성자가 호출됨 클래스에 포인터 형 변수가 있다면? 프로그래머가 직접 복사 생성자를 만들어줘야함 사용자가 만든 복사 생성자 클래스 안에서 동적으로 메모리를 할당하고 있다면? 얕은.. 2022. 2. 25.
#4. cast, dynamic_cast, RTTI, friend 클래스 const_cast 클래스에서 const, volatile 및 _unaligned 특성 제거 const 떼주는 것 static_cast 명시적 형 변환을 위한 캐스트 연산자 컴파일과 런타임 차이 빌드 : 소스코드 여러개를 하나로 묶는 것 컴파일: 하나로 묶은 빌드 파일을 기계어로 바꿔 주는 것 디버깅: 빌드. 한줄 씩 실행 하는 것 런타임: 메인 들어온 이후부터 dynamic_cast class의 상속 관계에서 형변환을 프로그래머가 올바르게 하도록 도와주는 기능 제공 RTTI(Run Time Type Information)을 지원 RTTI는 런타임에서 클래스의 type_info를 보고 해당 클래스가 올바른 type의 형태인지 아닌지 판단하게 해줌 사용 조건 virtual function을 사용해야 함 v.. 2022. 2. 19.
[C++] 생성자, 초기화 리스트, 기본 생성자, 컴파일러가 하는 일, 생성자 오버로딩, 소멸자, const 멤버 함수, 구조체 vs 클래스 본 내용은 POCU COMP3200: C++ 언매니지드 프로그래밍 강의를 토대로 작성하였습니다. 생성자 (Constructor) 개체 처음 만들어질 때 호출되는 함수 초기화 리스트 (Initializer List) : 찍으면 초기화 리스트 시작한다는 것 멤버 변수를 대입 없이 초기화 상수나 참조 변수도 초기화 가능 대입은 초기화가 된 이후에 실행되는 대입이고, 초기화 리스트는 오브젝트가 만들어질 때 초기화 하는 것 기본적으로 초기화리스트 해줄 수 있는 것들은 해주는 것이 좋다. 기본 생성자 기본 생성자는 매개변수를 받지 않음 따라서 초기화를 자기가 알아서 해줘야 함 클래스에 생성자가 없으면 컴파일러가 기본 생성자를 자동적으로 만들어 줌 이렇게 자동적으로 만들어진 생성자는 멤버 변수를 초기화하지 않음 하지.. 2022. 2. 14.
#3. 상속, 캡슐화, 다형성, 가상 함수, 순수 가상함수, 추상 클래스 상속 부모 클래스의 멤버 변수와 메소드를 자식 클래스가 재사용 재사용 : 그대로 쓸 수도 있지만 재정의해서 쓸 수도 있다 객체를 여러개 정의 해야 하는 경우 특히, 게임에서는 객체들 간의 상호 작용을 표현해야 하는 데, 그래픽만 갈아끼운 똑같은 객체들이 많음 ex. Class 몬스터 : 좌우 위아래 움직이고, 플레이어 때리고 죽으면 아이템 드랍 Class 몬스터 1 : 상속 (몬스터) Class 몬스터 2 : 상속 (몬스터) 좌우 위아래 움직이고 X -> 날아다녀 Class 몬스터 3 : 상속 (몬스터) 자식을 생성하면 부모 먼저 생성 후 자식이 생성됨 상속을 왜 써? 다형성 쓸 수 있어서 같은 함수로 알아서 자식 객체의 함수를 호출해주기 때문 (따라서 다 다른 함수를 부를 필요가 없음) 접근 제한자 접.. 2022. 2. 13.
[C++] 개체지향 프로그래밍 / OOP, 접근 제어자, 스택/힙, new/delete 본 내용은 POCU COMP3200: C++ 언매니지드 프로그래밍 강의를 토대로 작성하였습니다. 개체지향 프로그래밍(Object-Oriented Programming) OOP가 뭘까? 사람들이 세상을 바라보는 방식 = OOP의 핵심 개념 직관적 클래스 멤버 변수의 접근 권한 C++의 기본 접근 권한은 private Java에서 접근 권한 제어 키워드를 생략하면 public도 private도 아님 그 변수는 해당 패키지 내에서 접근 가능 class Vector { int mX; //private 멤버 변수 int mY; //private 멤버 변수 } 접근 제어자(Access Modifier) public 누구나 접근 가능 protected 자식 클래스에서 접근 가능 private 해당 클래스에서만 접근 .. 2022. 2. 5.