Форум программистов, компьютерный форум CyberForum.ru

Возвращение массива из функции при наследовании - C++

Восстановить пароль Регистрация
 
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
20.04.2014, 22:34     Возвращение массива из функции при наследовании #1
Здравствуйте!
У меня есть класс(Circle), который наследуется от нескольких базовых.
Мне нужно выполнить определенные вычисления, но перед этим вытащить массив типа double из экземпляра объекта Circle а[i], для это у меня есть метод GetCenterMass, который возвращает массив double. Проблема в том, что возвращается фигня.
То место, где мне надо вытащить массив из экземпляра а[i]:
C++
1
2
double *tmp = new double [2]; 
tmp = a[i].Circle::GetCenterMass();
Так определена функция Circle::GetCenterMass:
C++
1
2
3
double* Circle::GetCenterMass (void){
    return this->centerm;
}
centerm находится в классе PhysParam:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class PhysParam {
public:
    PhysParam(void);
    PhysParam( double& mass_, double* centerm_);
    ~PhysParam(void);
    virtual double GetMass (void) =0;
    virtual double* GetCenterMass (void) =0;
    virtual bool operator== ( PhysParam & b ) =0;
    virtual bool operator!= ( PhysParam & b ) =0;
    virtual bool operator< ( PhysParam & b ) =0;
    virtual bool operator> ( PhysParam & b ) =0;
    double mass;
    double* centerm;
};
Вот так выглядит класс Circle:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Circle : public GeomParam, public PhysParam, public MemParam, public DrawFigure {
public:
    Circle (void);
    Circle ( double& x_, double& y_, double& r_, double& mass_, double* centerm_);
    ~Circle (void);
    double square (void);
    double perimeter (void);
    double GetMass (void);
    double* GetCenterMass (void);
    bool operator== ( PhysParam & b );
    bool operator!= ( PhysParam & b );
    bool operator< ( PhysParam & b );
    bool operator> ( PhysParam & b );
    unsigned int GetSize (void);
    void Draw (void);
    double x, y, r;
};
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4299 / 3720 / 1253
Регистрация: 14.04.2014
Сообщений: 14,551
20.04.2014, 22:40     Возвращение массива из функции при наследовании #2
Если centerm массив, то ты просто возвращаешь указатель, а надо копировать массив поэлементно.
И не видно как он у тебя в самом классе создаётся, память конструктор выделяет?
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
20.04.2014, 22:48  [ТС]     Возвращение массива из функции при наследовании #3
а как я его скопирую поэлементно? у меня же функция GetCenterMass целиком массив отдает.
или мне сделать две функции возвращающие double?
память выделяет:
C++
1
2
3
4
5
6
PhysParam::PhysParam( double& mass_, double* centerm_){
    mass = mass_;
    centerm = new double [2];
    centerm[0] = centerm_[0];
    centerm[1] = centerm_[1];
}
nmcf
4299 / 3720 / 1253
Регистрация: 14.04.2014
Сообщений: 14,551
20.04.2014, 22:57     Возвращение массива из функции при наследовании #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Сделай
C++
1
2
3
4
5
virtual void GetCenterMass (double * cm)
{
cm[0] = centerm[0];
cm[1] = centerm[1];
}
Добавлено через 1 минуту
Зачем ты связался с указателями из-за двух Double? Объяви их просто в классе как две переменные или как структуру.
Острослав
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 37
20.04.2014, 23:24  [ТС]     Возвращение массива из функции при наследовании #5
Цитата Сообщение от nmcf Посмотреть сообщение
Зачем ты связался с указателями из-за двух Double? Объяви их просто в классе как две переменные или как структуру.
сейчас переделаю

Добавлено через 17 минут
Спасибо! Все заработало! //перешел к структуре вместо double*
Yandex
Объявления
20.04.2014, 23:24     Возвращение массива из функции при наследовании
Ответ Создать тему
Опции темы

Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru