TIL - 2021.2.18

Wanna be __·2021년 2월 19일
0

TIL

목록 보기
17/45
post-thumbnail

Today, I Learned

C++

  1. 클래서의 메서드를 확인할 때는 무엇보다 virtual 메서드를 유심히 보자.
  1. 다시 정리하는 참조와 포인터
우측 주석 값은 현재 생성한 변수에 대한 설명
int num1 = 111; // int를 가리키고 있는 변수
int* ptr1 = &num1; // (int를 가리키고 있는 변수)의 주소를 가리키는 포인터 
int& ref1 = num1; // (int를 가리키고 있는 변수)의 다른 이름
int& ref2 = *ptr1; // ((int를 가리키고 있는 변수)의 주소를 가리키는 포인터가 지정하는 변수)의 다른 이름
int* ptr2 = &ref1; // ((int를 가리키고 있는 변수)의 다른 이름)의 주소를 가리키는 포인터 
int* (&ref3) = ptr1; // ((int를 가리키고 있는 변수)의 주소를 가리키는 포인터)의 다른 이름

우측 주석 값은 현재 출력하고자 하는 값
cout << &num1 << endl; // (int를 가리키고 있는 변수)의 주소는? (= 0x10이라 가정)
cout << ptr1 << endl; // ((int를 가리키고 있는 변수)의 주소를 가리키는 포인터)의 값은? = 0x10
cout << &ptr1 << endl; // ((int를 가리키고 있는 변수)를 가리키는 포인터)의 주소는? (= 0x20이라 가정)
cout << &ref1 << endl; // ((int를 가리키고 있는 변수)의 다른 이름) 주소는? = 0x10
cout << &ref2 << endl; // (((int를 가리키고 있는 변수)의 주소를 가리키는 포인터가 지정하는 변수)의 다른 이름)의 주소는? = 0x10
cout << *ref3 << endl; // (((int를 가리키고 있는 변수)의 주소를 가리키는 포인터)의 다른 이름)이 가리키는 값은? = 111
cout << ref3 << endl; // (((int를 가리키고 있는 변수)의 주소를 가리키는 포인터)의 다른 이름)의 값은? = 0x10
cout << &ref3 << endl; // (((int를 가리키고 있는 변수)의 주소를 가리키는 포인터)의 다른 이름)의 주소는? = 0x20
  1. 순수 가상 함수 - JAVA의 abstract method를 가진 클래스와 유사
  2. 순수 가상 클래스 - 순수 가상 함수를 가진 클래스 -> 만약 모든 메서드가 순수 가상 함수라면 이는 JAVA의 Interface와 동일한 역할을 한다고 볼 수 있다.

순수 가상 클래스에 일반 메서드, 가상 메서드를 포함시킬 수 있나?
있다. 다만 순수 가상 함수가 포함되어 있기 때문에 인스턴스화 할 수 없다. 따라서 이러한 메서드 등을 전부 구현한 파생 클래스를 구현하고, 여기에 대한 참조형식으로 접근, 혹은 메서드를 지정하여 호출할 수는 있다.

profile
성장하는 개발자

0개의 댓글