: 나는 객체 지향 프로그래밍에 새로운 아니에요C++ 클래스 파생 및 superconstructor와 혼란 이봐, 튜토리얼 C에서 + + 코드, 내가 혼란이 특정 부분을 발견
PlasmaTutorial1::PlasmaTutorial1(QObject *parent, const QVariantList &args)
: Plasma::Applet(parent, args), // <- Okay, Plasma = namespace, Applet = class
m_svg(this), // <- A member function of class "Applet"?
m_icon("document") // <- ditto?
{
m_svg.setImagePath("widgets/background");
// this will get us the standard applet background, for free!
setBackgroundHints(DefaultBackground);
resize(200, 200);
}
을, 그래서 클래스 파생 슈퍼 클래스는 아무것도 복잡하지는 않지만이 구문은 나를 혼란스럽게 만들었습니다.
헤더 파일은 다음과 같이 클래스를 정의한다 : 위의
class PlasmaTutorial1 : public Plasma::Applet
{
유사, 네임 스페이스 플라즈마 및 클래스 애플릿. 하지만 거기에 public
은 무엇입니까?
나는 이미 개념을 알고 있지만 C++ 구문/방법을 이해하지 못한다고 우려한다.
this 질문에서 나는 이들을 "슈퍼 컨스트럭터 (superconstructors)"라고 불렀다. 적어도 그것이 내 기억 속에 갇힌 것이지만, 나는 이것을 완전히 확장하지 못했다.
첫 번째 발췌 문장을 다시 보면, 여기까지는 모두 Constructor::Class(...) : NS::SuperClass(...)
입니다. 그러나 m_svg(this), m_icon("document")
은 무엇을하고 있습니까? 이러한 특정 함수를 파생 클래스에 알리는 방법이 있습니까?
이 부분이 C++의 기본 사항입니까? 나는 C++에서 완전하게 잃어버린 것이 아니지만 C 언어로 가정에서 훨씬 더 많이 느낀다.
내가 지금까지해온 OOP의 대부분은 D, Ruby 또는 Python으로 수행되었다. 예를 들어 D에서 나는 단지 class MyClass : MySuperClass
을 정의하고, 필자가 필요로하는 것을 재정의하고 수퍼 클래스의 생성자를 호출해야합니다.
좋아, 가정 정확한 답변의 일부, 이것은 ...
PlasmaTutorial1::PlasmaTutorial1(QObject *parent, const QVariantList &args)
: Plasma::Applet(parent, args), // <- Call the _parent_ constructor
m_svg(this), // <- set m_svg (in the _derived_ class) to "this"
m_icon("document") // <- set m_icon (in the _derived_ class) to "document"
{
...
}
을 ... 읽은 후?
테스트의 가정은 지금까지 확인되었습니다. 고마워요! 이기는 대답을 골라내는 것은 어려운 선택입니다 ...
실제로 두 가지 질문이 있습니다. (1) 초기화 목록을 확인하십시오. (2) 보호 속성을 확인하십시오. – kennytm
"공개"는 상속 유형을 의미합니다. 그것은 또한 보호되거나 사적 일 수 있습니다. – a1ex07