첫째, class
와 C의 struct
++ 사이의 유일한 차이는 클래스의 멤버는 기본적으로 private
것으로하고, 구조체의 : 나는 이유를 알아낼 수 없습니다, 모든 것이 나에게 올바른 보이는 구성원은 기본적으로 public
입니다. 프로그래머가 별도로 지정하지 않는 한 컴파일러에서 생성 한 ctors 및 dtors는 두 경우 모두 표시됩니다 (예 : 기본 ctor를 private
섹션으로 이동). 그렇지 않으면 명시된 public 선언 없이는 class
으로 표시된 사용자 정의 형식의 인스턴스를 생성하고 파기 할 수 없으므로 컴파일러에서 생성 된 함수의 목적을 무시합니다.
기본적으로 사용자가 수행하는 작업은 단지 구성이며 두 가지 사용자 정의 유형 중 완벽하게 합법적입니다. capture
의 인스턴스를 만들면 test
의 인스턴스도 만들어집니다. 당신이 하지 수있는 일
공개적으로 test
외부에서 AttachToInput()
에 액세스하고 이 test
의 유형을 도출한다. 당신의 class test
는 char
에 원시 포인터를 보유하고, 다른에
h_cap.h_app.AttachToInput(); // error: member function of `test` is protected
, 관련이없는 메모를 (하지만 그래서 난 그것을 언급을 가로 질러 나는왔다) : 당신은 컴파일이 줄을 위해서는 기능 public
를 선언해야합니다. 가리키는 개체의 수명이 포인터를 보유하는 개체의 수명을 초과하도록 보장되면 원시 포인터를 보유하는 것이 좋습니다. 그렇지 않으면 개체 자체가 해당 개체를 파괴 할 가능성이 매우 높습니다. 당신은 누가 물건을 소유하고 누가 물건을 할당하고 할당 해제 할 책임이 있는지를 알아야합니다.
EDIT :이 답변을 작성하는 동안 Alan Stokes는 의견 섹션에서 같은 제안을했습니다. :)
EDIT2
: 암시 적 기본 액세스도
이 클래스 선언 파생 된 방법에 따라 기본 클래스에 대한 약간의 감독을 가정한다.
What are the differences between struct and class in C++?을 참조하십시오.
무엇이 문제입니까? –
'AttachToInput'은 보호되어 있기 때문에 호출 할 수 없으므로 파생 클래스에서만 사용할 수 있습니다. (Java와 같은 방식으로 작동하지 않습니다.) 그게 당신의 질문입니까? –
"나는 독특한"!? –