使用私有成员初始化静态const,非整数,类成员

时间:2012-01-24 20:36:44

标签: c++ static private integral

我正在尝试初始化静态const非整数。但是它需要私有的参数。如果它是整数类型,你可以把它放在类体中,并允许一个变量取另一个变量的值,即

static const int A=0;
static const int B=A;

但由于它的非整数必须在类体之外初始化,但由于成员是私有的,因此它们超出了课堂体外的范围。

例如

//HEADER
class Person
{
    static const float x;
    static const float y;
    static const int rad;
    static const sf::Color col;
    static const sf::Shape shape;
};

//CPP
const float Person::x=0;
const float Person::y=0;
const int Person::rad=16;
const sf::Color Person::col(255,0,0,255);
const sf::Shape shape=sf::Shape::Circle(Person::x,Person::y,Person::rad,Person::col);

Person :: x,Person :: y,Person :: rad,Person :: col超出范围,因为它们是私有的。 当我初始化一个静态const时,我希望不要将它放在每次创建新实例时都会调用的构造函数中。

例如

//HEADER
class Person
{
    static const float x;
    static const float y;
    static const int rad;
    static const sf::Color col;
    static const sf::Shape shape;

    Person();
};

//CPP
const float Person::x=0;
const float Person::y=0;
const int Person::rad=16;
const sf::Color Person::col(255,0,0,255);

Person::Person()
{
    const sf::Shape shape=sf::Shape::Circle(x,y,rad,col);
}

上述似乎有效,但我不希望因为上述原因而使用它。

有解决方法吗?没有让会员公开。

由于

2 个答案:

答案 0 :(得分:1)

将此公共函数添加到Person类。

static const sf::Shape defaultShape();

此函数可以访问私有变量并初始化静态Shape变量。

答案 1 :(得分:0)

不要使用类中的静态值来计算其他静态值。在这种情况下,如果您保持正确的顺序(Static variables initialisation order

,则有可能

您的课程设计存在疑问。如果x,y,rad,col仅用于圆圈,那么最好只是初始化默认圆圈而不是那些变量。

更改

static const float x ;

进入

static float x() { return 0 ; }

等。

相关问题