如何将类成员设置为常量?

时间:2014-08-04 11:02:48

标签: c++ oop inheritance

在下面的代码中,我在类string name中声明了SHAPE,以便子类可以具有常量名称。

但是,g ++编译器在CIRCLE'name' does not name a type内提供错误。

class SHAPE
{
    protected:
    string name;
};

class CIRCLE : public SHAPE
{
    name = "circle";
    public:
    void display()
    {
        cout<<name;
    }
};

我是OOP和C ++的新手。 任何纠正和改进我的代码的帮助都将受到赞赏。

3 个答案:

答案 0 :(得分:1)

如果您希望能够运行非静态类,则需要构造函数。

我建议这样的事情:

class SHAPE
{
    protected:
    SHAPE(const string& name_) : name(name_) {}  //Sets the string name.
    const string name;
};

class CIRCLE : public SHAPE
{
    public:
    CIRCLE() : SHAPE("TheNameYouWant") {}  //Call parents constructor
    void display()
    {
        cout<<name;
    }
};

所以现在你这样称呼它:

CIRCLE c1("someName");
c1.display();

创建一个SHAPE对象仍然是不可能的,这意味着它不会起作用(如果这是你想要的):

SHAPE s1("someName");

答案 1 :(得分:1)

你必须创建一个类构造函数

class CIRCLE : public SHAPE
{

public:
    CIRCLE() {
        name="circle";
    }
    void display()
    {
        cout<<name;
    }
};

答案 2 :(得分:0)

class SHAPE
{
public:
    explicit SHAPE(const string& name)
    : name(name)
    {
    }

    const string& GetName() const
    {
        return name;
    }

protected:
    string name;
};

class CIRCLE : public SHAPE
{
public:
    explicit CIRCLE(const string& name)
    : SHAPE(name)
    {
    }
};

int main()
{
    CIRCLE c("circle1");
    cout << c.GetName() << "\n";
}