해시 테이블
- Direct Addressing Table : 값을 인덱스로 사용하는 방식 ('A' = 65이므로 65번 인덱스로 'A'의 유무를 체크)
- 이 방식을 다른 말로 해시테이블이라고 한다.
- 해시테이블은 해시 함수가 있는데 문자를 넣어주면 고유의 식을 이용하여 결과물을 반환해준다.
- 해시테이블의 장점은 암호화를 할 수 있고 속도가 빠름
- 단점은 다른 값에 대해 동일한 해시값이 나올 수 있음
- 그럼 해시 충돌이 발생하고 그걸 연결 리스트로 주렁 주렁 연결함
- 이걸 해시 체이닝이라고 한다(면접 단골 질문)
연산자 오버로딩에 대하여
- 사용자정의 타입에 대해 덧셈 뺄셈을 하려면 인자를 빼서 걔네끼리 더해주고 빼주고 해야 함
- 클래스와 클래스 간의 연산을 하고 싶다면?
- Vector2 v3 = v1 + v2
- 반환값 operator연산자(인자)를 통해 클래스 간 연산을 구현할 수 있다.
- ==, =! 연산을 구현해놓으면 if문에 넣을 때 굉장히 편리하다.
상속에 대한 이야기
- 두 객체가 겹치는 데이터나 함수가 있음(예를 들면 hp, mp)
- 두 객체의 공통분모를 다시 클래스로 빼고 두 객체로 하여금 그 클래스로부터 상속받게 함
- class 두객체중하나 : public 그클래스
- 상속 받으면 부모 클래스가 가진 특성들을 물려받게 된다.
디자인 패턴에 대한 이야기
- 싱글턴패턴, 컴포지트패턴 여러 패턴이 있으나 따로 공부할 필요는 없다
- 패턴 설계하는데 시간을 너무 많이 소요함
- 객체지향으로 짤 때 함수를 먼저 고민하고 데이터를 그 후에 놓는 것처럼
- 디자인패턴은 이후에 이력서나 포트폴리오 만들 때 집중적으로 공부할 것.
다중 상속에 대한 이야기
- 잘 쓰이지 않음
- 쓰이는 예시로는 이벤트 몬스터를 설계할 때 부모 클래스로 Monster와 Network 이런 식으로 받는 것
- 그러나 Monster 배열에 이 이벤트 몬스터를 넣게 되면 Network는 짤리게 된다.
다이아몬드 상속 문제
- A를 상속받은 B와 C를 D가 다중상속 받았을 때 에러가 발생함
생성자 소멸자 호출 순서에 대한 이야기
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Polygon
{
public:
Polygon(){ cout << "Polygon ctor!" << endl; }
~Polygon() { cout << "Polygon dtor!" << endl; }
};
class Rectangle : public Polygon
{
public:
Rectangle() { cout << "Rectangle ctor!" << endl; }
~Rectangle() { cout << "Rectangle dtor!" << endl;}
};
class Triangle : public Polygon
{
public:
Triangle(){ cout << "Triangle ctor!" << endl;}
~Triangle(){ cout << "Triangle dtor!" << endl;}
};
int main()
{
Rectangle rect;
Triangle tri;
return 0;
}
- 생성 시 위에서부터 생성되며 생성 순서는 기본 클래스 ->파생 클래스 순으로 생성 되며
- 소멸 시는 아래서부터 파괴됨 파괴 순서는 파생 클래스 -> 기본 클래스 순서
friend에 대한 이야기
- 내 private 멤버에 접근 가능한 클래스를 지정하는 문법
- 객체지향의 캡슐화를 깬다는 말들이 많은데 한편으로는 더 철저히 지키기 위해 사용된다는 의견도 있다고 함
가상함수에 대한 이야기
- 가상 함수는 부모 클래스에 선언해주어야 한다.
- 가상 함수를 만들면 int 멤버 2개를 가진 객체가 sizeof로 재면 16이 나온다 왜?
- 0번째 주소에 가상함수 테이블을 가리키는 포인터가 있음
- 상속을 받으면 부모의 가상함수 테이블을 자식의 가상함수 테이블이 덮어씌운다.
- 그래서 자식이 물려받은 가상함수가 새로 정의한 대로 사용 가능했던 것.
- 부모의 포인터로 받은 자식의 포인터는 부모의 소멸자만 호출되므로 가상 함수로 필히 만들어야 한다.
- 면접 단골문제임
'C++ > [AssortRock] C++ 기초 다지기' 카테고리의 다른 글
CPP_1. AssortRock 14일차 오프라인 수업_220926 (0) | 2022.09.27 |
---|---|
CPP_1. AssortRock 13일차 오프라인 수업_220923 (0) | 2022.09.27 |
CPP_1. AssortRock 8일차 오프라인 수업_220916 (0) | 2022.09.18 |
CPP_1. AssortRock 7일차 오프라인 수업_220915 (0) | 2022.09.16 |
CPP_1. AssortRock 6일차 오프라인 수업_220914 (0) | 2022.09.15 |
댓글