在下面的代码中,我在类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 ++的新手。 任何纠正和改进我的代码的帮助都将受到赞赏。
答案 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";
}