2013-03-11 156 views
0

我想明白下面的代码。(我学习C++)类的构造函数初始化?

class DefaultDevice : public Device { 
    public: 
    DefaultDevice() : 
     ui(new DefaultUI) { 
    } 
    private: 
    RecoveryUI* ui; 
}; 
class DefaultUI : public ScreenRecoveryUI { 
... 
} 

我有一点小麻烦了解UI(新DefaultUI)一部分。 据我所知,它是DefaultDevice()构造函数执行前的初始化的一部分。
然后,从我的理解,它将打电话给ReocoveryUI构造函数与新的DefaultUI参数。但是,RecoveryUI类没有任何带有这样的参数的构造函数。(对不起没有构造RecoveryUI类,它太长了:(如果有人感兴趣,它是Android开源代码)

那么这个'new DefaultUI'怎么办?

+1

尝试阅读一本好的C++编程书。他们会在几分钟内解释得比我们更好。另外,使用'g ++ -Wall -g'进行编译,并使用调试器'gdb'在代码中一步一步地进行编译。 – 2013-03-11 07:27:44

回答

0

如果这是一个有效的和工作的代码,这似乎RecoveryUIDefaultUI的基类。

ui(new DefaultUI)创建一个对象,并将其分配给ui

所以,ui点到其子对象

+0

so ui(新的DefaultUI)创建一个RecoveryUI对象或DefaultUI对象?如果它是ui(新的DefaultUI()),我可以看到它将DefaultUI对象传递给RecoveryUI构造函数。 – Todd 2013-03-11 07:42:49

+0

它创建'DefaultUI'对象,但将其保存为'RecoveryUI'。 – deepmax 2013-03-11 07:46:50

+0

@Todd'new DefaultUI'创建一个'DefaultUI'并返回一个指向'DefaultUI'的指针。 'ui'是用这个地址初始化的,所以你最终得到一个指向'DefaultUI'对象的'RecoveryUI'指针。 – juanchopanza 2013-03-11 08:00:46

0

它不运行之前 ctor,它是ctor的一部分。它被称为初始化器列表,它用于初始化类的(非静态)成员变量。