参考循环 C++
Reference Loop C++
我有一个classColor
,我想定义一个这样的常量class,并在class中使用那个常量。所以代码可能如下所示:
class Color;
const Color BLACK = *new Color(0, 0, 0);
const Color WHITE = *new Color(255, 255, 255);
class Color {
const int r;
const int g;
const int b;
Color CloserBlackOrWhite() {
int rgb = r + g + b;
return rgb > (255*3/2) ? BLACK : WHITE;
}
}
当然,问题在于 BLACK
/WHITE
无法定义,因为它们使用的是不完整类型。我尝试通过将常量放在 class 声明下方来解决这个问题。
class Color {
const int r;
const int g;
const int b;
Color CloserBlackOrWhite() {
int rgb = r + g + b;
return rgb > (255*3/2) ? BLACK : WHITE;
}
}
const Color BLACK = *new Color(0, 0, 0);
const Color WHITE = *new Color(255, 255, 255);
除了现在 CloserBlackOrWhite
正在引用一个未知值。
那么,有没有办法在 class 声明之前声明常量?
或者还有其他我所缺少的方法吗?
这里不需要内存分配。您只需要转发声明您的常量颜色,并转发声明您的 class 即可完成第一步。您还需要一个 public 构造函数,以及至少一些 public 方法。
这一切给你:
class Color;
extern const Color BLACK;
extern const Color WHITE;
class Color {
const int r;
const int g;
const int b;
public:
Color(int r, int g, int b):r(r), g(g), b(b)
{
}
Color CloserBlackOrWhite() {
int rgb = r + g + b;
return rgb > (255*3/2) ? BLACK : WHITE;
}
};
const Color BLACK = Color(0, 0, 0);
const Color WHITE = Color(255, 255, 255);
这有效并使您的 class 界面更易于阅读。
无论如何,大多数时候我们都希望将实际函数移动到源文件中。
class Color {
protected:
const int r;
const int g;
const int b;
public:
Color(int r, int g, int b):r(r), g(g), b(b)
{
}
Color CloserBlackOrWhite();
};
const Color BLACK = Color(0, 0, 0);
const Color WHITE = Color(255, 255, 255);
Color Color::CloserBlackOrWhite() {
int rgb = r + g + b;
return rgb > (255*3/2) ? BLACK : WHITE;
}
我还会添加比较运算符。
我有一个classColor
,我想定义一个这样的常量class,并在class中使用那个常量。所以代码可能如下所示:
class Color;
const Color BLACK = *new Color(0, 0, 0);
const Color WHITE = *new Color(255, 255, 255);
class Color {
const int r;
const int g;
const int b;
Color CloserBlackOrWhite() {
int rgb = r + g + b;
return rgb > (255*3/2) ? BLACK : WHITE;
}
}
当然,问题在于 BLACK
/WHITE
无法定义,因为它们使用的是不完整类型。我尝试通过将常量放在 class 声明下方来解决这个问题。
class Color {
const int r;
const int g;
const int b;
Color CloserBlackOrWhite() {
int rgb = r + g + b;
return rgb > (255*3/2) ? BLACK : WHITE;
}
}
const Color BLACK = *new Color(0, 0, 0);
const Color WHITE = *new Color(255, 255, 255);
除了现在 CloserBlackOrWhite
正在引用一个未知值。
那么,有没有办法在 class 声明之前声明常量?
或者还有其他我所缺少的方法吗?
这里不需要内存分配。您只需要转发声明您的常量颜色,并转发声明您的 class 即可完成第一步。您还需要一个 public 构造函数,以及至少一些 public 方法。
这一切给你:
class Color;
extern const Color BLACK;
extern const Color WHITE;
class Color {
const int r;
const int g;
const int b;
public:
Color(int r, int g, int b):r(r), g(g), b(b)
{
}
Color CloserBlackOrWhite() {
int rgb = r + g + b;
return rgb > (255*3/2) ? BLACK : WHITE;
}
};
const Color BLACK = Color(0, 0, 0);
const Color WHITE = Color(255, 255, 255);
这有效并使您的 class 界面更易于阅读。 无论如何,大多数时候我们都希望将实际函数移动到源文件中。
class Color {
protected:
const int r;
const int g;
const int b;
public:
Color(int r, int g, int b):r(r), g(g), b(b)
{
}
Color CloserBlackOrWhite();
};
const Color BLACK = Color(0, 0, 0);
const Color WHITE = Color(255, 255, 255);
Color Color::CloserBlackOrWhite() {
int rgb = r + g + b;
return rgb > (255*3/2) ? BLACK : WHITE;
}
我还会添加比较运算符。