默认声明的属性? (国家设计模式)

时间:2017-01-09 22:50:24

标签: c++ class default private encapsulation

我有班级PrinceFrog(两者都是State的孩子(这是虚拟的),并且声明的方法略有不同welcome()sayGoodbye() < / p>

我唯一的问题是为什么State* m_state不公开? (它是默认的吗? - 这意味着什么?)代码是100%好的,但在老师给我们提供有关设计模式的材料之前,我从未见过这样的声明。

Monster.h

class Monster{
    State* m_state;
public:
    Monster();
    void kiss();
    void welcome();
    void sayGoodbye();
    ~Monster();
};

Monster.cpp

Monster::Monster(){
    m_state = new Frog();
}

void Monster::kiss(){
    delete m_state;
    m_state = new Prince();
}

void Monster::welcome(){
    m_state->welcome();
}

void Monster::sayGoodbye(){
    m_state->sayGoodbye();
}

Monster::~Monster(){
    delete m_state;
}

1 个答案:

答案 0 :(得分:1)

默认情况下,c ++结构中的

是公共的,默认情况下是class和private,因此m_state是私有的(类中定义的对象是私有的,除非已经创建了另一个保护语句)

class Monster{
    State* m_state;
public:
    Monster();
    void kiss();
    void welcome();
    void sayGoodbye();
    ~Monster();
};

相同
class Monster{
private:
    State* m_state;
public:
    Monster();
    void kiss();
    void welcome();
    void sayGoodbye();
    ~Monster();
};

,而

 struct Monster{
        State* m_state;
    public:
        Monster();
        void kiss();
        void welcome();
        void sayGoodbye();
        ~Monster();
    };

在这个结构中m_state是public