2010-05-21 58 views
0

在标题中,我定义了bool isActive。在从这个派生的类中,我想使isActive默认为false。我试图通过添加C++如何将抽象类中的成员变量设置为默认值?

AbstractClass::isActive = false; 

到cpp文件这样做,但导致错误“之前‘=’令牌预期的构造函数,析构函数或类型转换。”

回答

9

在类的构造函数初始化:

class AbstractClass { 
    bool isActive; 

    AbstractClass() : isActive(false) { 
    } 

    // ... 
}; 

那类包含抽象方法不能从具有用于初始化它的成员变量构造函数阻止它。

+2

如果有多个ctor,请确保将它设置为全部。 – pmr 2010-05-21 20:14:23

+0

@pmr:抽象类通常用作虚拟基类。对于虚拟基类,实现除默认构造函数之外的任何东西都是一个坏主意。但是,是的,如果这个班级不被用作虚拟基础班,那你是对的。 – sbi 2010-05-21 20:20:17

+0

所以答案就是我应该添加:isActive(false)到从AbstractClass继承的每个类的构造函数? – Roderick 2010-05-21 20:21:38

0

AbstractClass::isActive = false;

是指(不存在)静态类成员。如果存在,它将作为整个班级的单个共享实例存在,并且实际上会像您那样初始化它。

但是你有一个实例变量,这意味着类的每个实例都有自己的副本。要初始化,你会怎么说;在初始化程序列表中初始化它在类的ctor中,或者在ctor主体中,或者更好,如某种建议。

相关问题