Эй, в учебном коде на 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
{
Аналогично выше, пространство имен Plasma и класс Applet. Но что там делает public
? 1010 *
Боюсь, что я уже знаю эту концепцию, но не понимаю синтаксиса C ++ / способа сделать это.
В этом вопросе я поднял вопрос о том, что они называются «суперконструкторами», по крайней мере, это то, что застряло в моей памяти, но я не понимаю этого в полной мере.
Если мы оглянемся назад на первый фрагмент, мы увидим Constructor::Class(...) : NS::SuperClass(...)
, все в порядке 'до здесь. Но что m_svg(this), m_icon("document")
делает там? Это какой-то метод, позволяющий сделать эти конкретные функции известными производному классу?
Является ли это частью основ C ++ или более непосредственным? Хотя я не совсем потерян в C ++, я чувствую себя намного лучше в C:)
Большая часть ООП, которую я сделал до сих пор, была сделана на 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"
{
...
}
... предположение верно?
Тесты подтвердили мое предположение. Большое спасибо! Выбор победившего ответа - трудный выбор, хотя ...