c # — пресеты классов (как Color.Red)

Я пытался создать предопределенные классы несколько раз на разных языках, но я не мог выяснить, как.

Это один из способов, которым я попробовал это:

public class Color{
public float r;
public float r;
public float r;

public Color(float _r, float _g, float _b){
r = _r;
g = _g;
b = _b;
}
public const Color red = new Color(1,0,0);
}

Это в C #, но мне нужно сделать то же самое в Java и C ++, поэтому, если решение не совпадает, я хотел бы знать, как это сделать во всех этих случаях.

РЕДАКТИРОВАТЬ: этот код не работал, поэтому вопрос был для всех трех языков. Я получил рабочие ответы для C # и Java сейчас, и я думаю, что C ++ работает так же, так что спасибо!

0

Решение

Я думаю, что хороший способ в C ++ — использовать статические члены:

// Color.hpp
class Color
{
public:
Color(float r_, float g_, float b_) : r(r_), g(g_), b(b_) {}
private: // or not...
float r;
float g;
float b;

public:
static const Color RED;
static const Color GREEN;
static const Color BLUE;
};

// Color.cpp
const Color Color::RED(1,0,0);
const Color Color::GREEN(0,1,0);
const Color Color::BLUE(0,0,1);

В вашем коде вы получаете к ним доступ как Color c = Color::RED;

1

Другие решения

В Java вы можете использовать enum для этого.

enum Colour
{
RED(1,0,0), GREEN(0,1,0);

private int r;
private int g;
private int b;

private Colour( final int r, final int g, final int b )
{
this.r = r;
this.g = g;
this.b = b;
}

public int getR()
{
return r;
}

...
}
3

Ява очень похожа

public class Color {
//If you really want to access these value, add get and set methods.
private float r;
private float r;
private float r;

public Color(float _r, float _g, float _b) {
r = _r;
g = _g;
b = _b;
}
//The qualifiers here are the only actual difference. Constants are static and final.
//They can then be accessed as Color.RED
public static final Color RED = new Color(1,0,0);
}
1
По вопросам рекламы [email protected]