
👍🏻 이번 주 수업에서 좋았던 점 Liked
📚 이번 주에 새롭게 배운 점 Learned
+=, <<, ++(전위) 등의 연산자는 참조를 리턴해야 한다class Math {
int n, m;
public:
Math& operator++ ();
};
Math& Math::operator++ () {
n++;
m++;
return *this;
};상속
class me : public Person { ... };// 업 캐스팅: 파생 클래스의 객체를 기본 클래스의 포인터로 가리킴
// → 파생 클래스의 객체를 기본 클래스의 객체처럼 다룰 수 있음
ColorPoint cp;
ColorPoint *pDer = &cp;
Point *pBase = pDer;
// 다운 캐스팅: 기본 클래스의 포인터가 가리키는 객체를 파생 클래스의 포인터로 가리킴
// cuation: 명시적인 타입 변환이 요구된다
ColorPoint cp;
ColorPoint *pDer;
Point *pBase = &cp;
pDer = (ColorPoint *)pBase;| private 멤버 | protected 멤버 | public 멤버 | |
|---|---|---|---|
| 멤버를 선언한 클래스 | o | o | o |
| 파생 클래스 | x | o | o |
| 다른 클래스나 외부 함수 | x | x | o |
B::B(int x) : A(x + 3) { ... }class MusicPhone **: public MP3, public MobilePhone** { … };class In : **virtual** public BaseIO { … };가상 함수
++ 오버라이딩
++ 동적 바인딩
== 실생 시간 바인딩(run-time binding), 늦은 바인딩(late binding)
가상 함수 호출 코드를 컴파일 타임이 아닌 런타임에 오버라이딩된 가상 함수를 동적으로 찾아 호출함
++ 가상 소멸자
virtual ~MyClass(); 소멸자 호출 시 동적 바인딩 발생
파생 클래스의 객체가 기본 클래스에 대한 포인터로 delete 되는 상황에서도 정상적인 소멸이 되도록 하기 위해서는 기본 클래스의 소멸자를 만들 때 가상 함수로 작성해야 한다.
템플릿
함수나 클래스를 일반화시키고 매개 변수 타입을 지정해 함수나 클래스 코드를 찍어내듯 코드를 생산하는 기법을 일반화(Generic)라고 한다
이때 일반화하는 도구를 템플릿이라고 하며, template 키워드로 선언
함수 코드의 재사용성이 높으나 포팅에 취약하다
// 하나의 제네릭 타입
template <{class|typename} T>
T bigger(T a, T b) { ... }
// 두 개 이상의 제네릭 타입
template <{class|typename} T1, {class|typename} T2>
T add(T data[], int n) { ... }
// 중복 함수
// char형 배열을 첫 번째 인자로 넣으면 두 개의 함수 중 밑에 있는 함수가 호출됨
template <class T>
void print(T array[], int n) { ... }
void print(char array[], int n) { ... }
// 선언
template<class T>
class MyStack {
int tos;
T data[100];
public:
MyStack();
void push(T element);
T pop();
};
// 구현
template<class T>
void MyStack<T>::push(T element) { ... }
template <class T> T MyStack::pop() { ... }
// 구체화
MyStack<int> stack;
람다식
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++)
cout << *it << endl;
// 위의 복잡한 타입을 auto를 사용해 간소화
for (auto it = v.begin(); it != v.end(); it++)
cout << *it << endl;| [x] | 변수 x의 값 | [&x] | 참조 변수 x |
|---|---|---|---|
| [=] | 모든 변수의 값 | [&] | 모든 참조 변수 |
// 람다식의 구조 (리턴 타입 생략 가능)
[ ] ( ) -> returntype { }
// example
[](int x, int y) {cout << x + y;}
[](int x, int y) -> int {x + y;} (2, 3);🧐 배운 것에 관련해서 내가 부족했던 점 Lacked
📝 앞으로 무엇을 더 하면 좋을지 Longed for
VEDA 바로가기 : www.vedacademy.co.kr
VEDA(한화비전 아카데미) 영상으로 확인하기 : https://url.kr/zy9afd
본 후기는 VEDA(한화비전 아카데미) 1기 학습 기록으로 작성되었습니다.