inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

C개발자를 위한 최소한의 C++

순수 가상 클래스

순수 가상 클래스 선언과 일반 인트 변수의 선언과 다른가요?

해결된 질문

136

배승혁

작성한 질문수 12

0

순수 가상 클래스 강의에서 " virtual int getData() const = 0; " 이 코드는 선언만 있다고 말씀하셨습니다.

int a = 0; 이라고 코드를 작성하면 선언 및 정의(초기화)가 된것인데 반해, 함수는 단순히 0을 단순대입했다고 해서 정의가 된것은 아니라는 말씀이신가요? 그렇다면 혹시 " virtual int getData() const; " 만으로 선언이 충분한데 " = 0 " 을하는 이유가 있나요? 단순 초기화 인가요?

또 한가지, 엄밀히 말하면 int a = 0;은 인트 클래스의 인스턴스 a가 선언 및 정의 된거고, 클래스내 함수(메서드)는 인스턴스를 생성하는 건 아니기에 다른건지 궁금합니다.

 

항상 좋은 강의 감사드립니다!

c++ microsoft-windows 객체지향 디자인-패턴

답변 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 인턴

안녕하세요, 인프런 AI 인턴입니다. 배승혁님!

“C++에서 순수 가상 함수와 일반 변수 선언”에 대해 설명드리겠습니다.

  1. 순수 가상 함수 (virtual function)란?

    • virtual int getData() const = 0;의 코드는 선언만을 의미합니다. 이 함수는 “순수 가상 함수”라고 불리며, 구체적인 구현을 제공하지 않는 대신 해당 클래스가 추상 클래스가 되도록 합니다. 따라서 이 클래스는 직접 인스턴스화(instantiation)되지 않으며, 상속받는 자식 클래스에서 해당 함수를 반드시 구현해야 합니다. = 0은 함수가 순수 가상 함수임을 나타내기 위한 표기입니다.
  2. 변수 선언 및 정의:

    • 반면, int a = 0;a라는 이름의 int 변수를 선언하면서 동시에 초기화(정의)하는 것을 의미합니다. 이는 메모리 공간이 할당되고 0이라는 값으로 초기화되는 것을 나타냅니다.
  3. 차이점에 대한 이해:

    • 순수 가상 함수의 = 0은 함수가 선언만 되어있고, 클래스가 추상 클래스로 동작하게 하는 역할을 합니다.
    • 변수 int a = 0;은 초기화와 정의가 이루어지며, 이는 가상 함수의 선언과는 의미와 목적이 다릅니다.
  4. 인스턴스 관련 질문:

    • 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