数据成员的类内初始化。继承后遗留的价值是多少?

时间:2017-10-11 15:44:33

标签: c++11

如此简单的问题是,如果我有这种情况:

class FooA{
public:
    int getID(){
        return ID;
    }
private:
    int generateID(){
        //some code that generate unique ID
    }
    int ID = generateID();
};

class FooB : public FooA{

};

在FooA中初始化的ID也会转到FooB吗?所以对于FooB,我可以使用getID,例如从FooA :: generateID获取值。

1 个答案:

答案 0 :(得分:0)

这两个类的每个实例都将重新运行generateID,为每个实例生成唯一值。 不,为父类实例生成的ID不会与为后代实例生成的ID相同,因为它们将具有不同的实例。 是的,后代可以使用或暴露父母的方法。

class FooA{
    public:
        int getID(){
            return ID;
        }
    private:
        int generateID(){
           static int i = 0;
           return i++;
        }
        int ID = generateID();
    };

    class FooB : public FooA{

    };

int main() {
    // your code goes here
    cout <<  (FooA()).getID() << endl; // 0
    cout <<  (FooA()).getID() << endl; // 1
    cout <<  (FooB()).getID() << endl; // 2
    return 0;
}

https://ideone.com/5Klf3d