순수 가상 클래스 선언과 일반 인트 변수의 선언과 다른가요?
순수 가상 클래스 강의에서 " virtual int getData() const = 0; " 이 코드는 선언만 있다고 말씀하셨습니다.
int a = 0; 이라고 코드를 작성하면 선언 및 정의(초기화)가 된것인데 반해, 함수는 단순히 0을 단순대입했다고 해서 정의가 된것은 아니라는 말씀이신가요? 그렇다면 혹시 " virtual int getData() const; " 만으로 선언이 충분한데 " = 0 " 을하는 이유가 있나요? 단순 초기화 인가요?
또 한가지, 엄밀히 말하면 int a = 0;은 인트 클래스의 인스턴스 a가 선언 및 정의 된거고, 클래스내 함수(메서드)는 인스턴스를 생성하는 건 아니기에 다른건지 궁금합니다.
항상 좋은 강의 감사드립니다!
답변 2
0
C++에서 함수는 0이 될 수 없습니다. 무엇보다 인스턴스 선언 시 사용되는 '='은 할당 연산자로 볼 수 없습니다. 그러므로 문법적인 측면에서 이해하는 것이 좋겠습니다.
서양의 언어는 명사로 부정합니다. 즉, 'Noting이 있다'라고 합니다. 그런 관점에서 '= 0'은 초깃값 기술이 아니라 함수 정의가 없다는 것에 대한 명시적 표현으로 이해 할 수 있겠습니다.
그리고 int형은 형식(Type)은 맞지만 Class가 되지는 않습니다. Instance라는 표현은 개념적 어휘로 여러 목적으로 사용됩니다. 프로그래밍 언어에서는 Instance는 형식에 대한 실체 정도로 생각해볼 수 있습니다.
즉 int a = 0;의 의미는
int 형식에 대한 Instance인 a의 초깃값이 0 이라는 의미가 되겠습니다. 선언과 동시에 값이 정의되는 경우가 되겠습니다.
0에 대해 int 0이라는 의미 외에 포인터 관점에서 null로 구분하기도 합니다. 이는 때로 지나친 자유로 보고 문법적으로 통제해야 할 대상으로 봅니다. 해서 Java에서는 0과 null은 다른 것으로 취급합니다. 값이 같다해서 형식도 일치하는 것으로 볼 수는 없기 때문입니다. 거기에 개념적으로만 보면 void의 의미를 가질 수도 있습니다.
말이 길어졌네요. 개념 정리에 도움이 되기를 바랍니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. 배승혁님!
“C++에서 순수 가상 함수와 일반 변수 선언”에 대해 설명드리겠습니다.
순수 가상 함수 (
virtual function)란?virtual int getData() const = 0;의 코드는 선언만을 의미합니다. 이 함수는 “순수 가상 함수”라고 불리며, 구체적인 구현을 제공하지 않는 대신 해당 클래스가 추상 클래스가 되도록 합니다. 따라서 이 클래스는 직접 인스턴스화(instantiation)되지 않으며, 상속받는 자식 클래스에서 해당 함수를 반드시 구현해야 합니다.= 0은 함수가 순수 가상 함수임을 나타내기 위한 표기입니다.
변수 선언 및 정의:
- 반면,
int a = 0;는a라는 이름의int변수를 선언하면서 동시에 초기화(정의)하는 것을 의미합니다. 이는 메모리 공간이 할당되고0이라는 값으로 초기화되는 것을 나타냅니다.
- 반면,
차이점에 대한 이해:
- 순수 가상 함수의
= 0은 함수가 선언만 되어있고, 클래스가 추상 클래스로 동작하게 하는 역할을 합니다.
- 변수
int a = 0;은 초기화와 정의가 이루어지며, 이는 가상 함수의 선언과는 의미와 목적이 다릅니다.
- 순수 가상 함수의
인스턴스 관련 질문:
int a = 0;는 형식적으로 C++에서도 클래스 인스턴스로 간주될 수 있는int형의 변수입니다. 반면, 클래스 내 함수(메서드)는 클래스 인스턴스의 동작을 정의하지만, 그 자체로 별도의 인스턴스를 의미하지는 않습니다.
관련하여 더 깊이 있는 설명이 필요하시다면 추가 질문을 남겨주세요. 기존 답변 중 배승혁님 질문과 유사한 내용의 질문 링크도 참고하시면 더 도움될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
인터페이스 상속과 추상 자료형 2:00 질문
0
50
1
13분 42초의 예제
0
52
2
네임스페이스 스코프 내에서 정의된 변수, 함수들이 위치하는 곳 질문
0
46
1
소멸자 가상함수 질문
0
55
2
이동생성자의 매개변수로 넘어가는 임시객체의 값 유지 관련하여 질문이 있습니다.
0
62
2
임시 객체 복사 생성자 질문드립니다
0
66
2
변수 바인딩에 대한 의문점
0
113
1
C++ 파일 구조 질문
0
128
1
빈 포인터에 멤버함수 호출
0
104
1
파생클래스에서 virtual함수를 선언에 대한 질문입니다.
0
115
2
안녕하세요. 이동의미론에 대해 제가 잘 이해했는지 궁금합니다.
0
128
1
인스턴스의 개념에 대해 int a(3), int(5) 예시를 바탕으로한 질문입니다.
0
189
2
식별자 검색 순서 관련 namespace 생략 관련 오류에 관한 질문
0
175
1
마지막 주소록 예제 c 파일 한글 깨짐 현상
0
190
1
nullprt vs null
0
153
2
쓸데없지만 질문드리고싶습니다
0
181
1
복사 생성자 질문 드립니다.
0
220
1
생성자 궁금한거 있습니다
0
217
2
단순대입 오류 발생 이유
0
234
1
네가지 형변환 강의 질문
0
282
1
CMyString Step10 강의 질문
0
173
1
임시 객체와 보이지 않는 복사 생성 강의 질문
0
267
2
섹션8 3번째 강의 (실습 프로젝트 - 문자열 필터개선) 질문
0
218
2
차이점을 잘 모르겠습니다.
0
231
1





