c ++ универсальный указатель?пустой указатель? - PullRequest
0 голосов
/ 27 сентября 2011

Я пишу программу, которая может принимать в конструкторе либо 3 целых, либо 3 числа с плавающей запятой (полагаю, для этого мне понадобятся 2 конструктора).Я хочу объявить массив и сохранить значения в массиве «числа».

Если я не знаю, какой конструктор будет вызываться, я не уверен, как объявить «числа» (как массив int или как массив с плавающей точкой).

Есть ли хороший методобойти это?или я могу создать массив int и массив с плавающей точкой и каким-то образом иметь общий указатель на используемый массив (лучше всего использовать void-указатель)?

Ответы [ 3 ]

5 голосов
/ 27 сентября 2011

Не можете ли вы использовать шаблоны для этого?

пример:

template <class T> 
class Foo {
    public Foo(T a, T b, T c);
};
//
Foo<float> aaa(1.0f, 1.0f, 0.5f);
Foo<int> bbb(1, 2, 3);
5 голосов
/ 27 сентября 2011

Похоже, вы хотите шаблонный класс.

template <class T>
class Foo
{
public:
    Foo(T a, T b, T c)
    {
        numbers[0] = a;
        numbers[1] = b;
        numbers[2] = c;
    }
private:
    T numbers[3];
};
0 голосов
/ 27 сентября 2011

Почему бы не сделать

class Foo {
public:
    Foo(double a, double b, double c)
        :_a(a), _b(b), _c(c)
    {}

    virtual double get_a() {return _a;}
    virtual double get_b() {return _b;}
    virtual double get_c() {return _c;}
    // more methods

protected:
    double _a, _b, _c;
};

хорошо работает как для целых, так и для поплавков:

Foo ifoo(1, 3, 5);
Foo ffoo(2.0, 4.0, 6.0);

и для их смешивания:

Foo mfoo(1, 4.0, 5);

douable место для хранения больше, чем достаточно для int и float

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...