Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объект в качестве аргумента функции 
:(
    Опции темы
Syltan
Дата 14.2.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Попробовал написать программу, в которой хочу использовать, метод который возвращает объект,  программа застряла на 
строке:
Код

temp +=x + y;

Дальше не хочет идти.  Хочу сложить 2 объекта и передать результат их сложения методу, а затем 
пробую вызывать метод, но он не хочет чего-то вызываться. В чём может быть проблемма?
Код

#include <iostream>
using namespace std;

class Ala{
private: int x; float y;
public: Ala():x(0), y(0) { }
        Ala(int z1, float z2):x(z1),y(z2) {}
        Ala func(Ala yra);
        void get();
};


Ala Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
    temp +=x + y;
    return temp;
}

void A::get()
{
    cout<<"Результат = "<<func(yra);
}
int main()
{
    Ala e1, e2;
    Ala f(54,22.3);
    e1 = e2.func(f);
    e1.get();
    cin.get();
}


PM MAIL   Вверх
Albor
Дата 14.2.2010, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Цитата(Syltan @  14.2.2010,  22:50 Найти цитируемый пост)
Ala Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
    temp +=x + y;
    return temp;
}

А параметр у функции зачем? x и y у тебя числа, а temp - это Ala. Как их сложить компилятор не знает. Всё зависит от тебя.
PM MAIL ICQ   Вверх
Syltan
Дата 14.2.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Попробовал так, но на том же месте не компилится.
Код

Ala Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
    yra+=x + y;
    return yra;
}

PM MAIL   Вверх
Albor
Дата 14.2.2010, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Что должна делать твоя функция? Сложить yra с вызывающим объектом?

PM MAIL ICQ   Вверх
Syltan
Дата 14.2.2010, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Она должна сложить 2 объекта, а метод get должен вывести результат.

Это сообщение отредактировал(а) Syltan - 14.2.2010, 23:25
PM MAIL   Вверх
RatHat
Дата 14.2.2010, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



Хмммм, оно так работать и не будет, очевидно же...
Просто если бы ты писал что-то типа 
Код

yra.x += (temp.x + temp.y);

то было бы еще более-менее понятно...

А так ты самому объекту пытаешься присвоить какое-то значение...объект пугается и жалуется компиллятору.
Компиллятор встаёт на защиту обиженного объекта и ругается на тебя еррорами.

ЗЫ, если что, не пинайте ногами, может я просто не понял сути вопроса...

Это сообщение отредактировал(а) RatHat - 14.2.2010, 23:49
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
Syltan
Дата 14.2.2010, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Если вот писать, так тоже не компилится.
Код

Ala Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
yra.x += (temp.x + temp.y);
return yra.x;
}

PM MAIL   Вверх
RatHat
Дата 14.2.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



иссесно, не компилится. ты возвращаешь тип int вместо типа Ala.
а вообще, ты бы еще ошибку приводил, если можно (у меня дома никакого компиллятора нет сейчас...)
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
Syltan
Дата 15.2.2010, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Если написать вот так:
Код

Ala Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
yra.x += (temp.x + temp.y);
return temp;
}


Выдаст такую ошибку:
.\Proba.cpp(22) : error C2653: 'A' : is not a class or namespace name

PM MAIL   Вверх
RatHat
Дата 15.2.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: нет
Всего: 1



Блин...
Во-первых: зачем ты возвращаешь temp, если тебе нужно возвращать yra - ты же в yra.x вроде результат складывал...напиши return yra.

Во-вторых:
не
Код

void A::get()

а 

Код

void Ala::get()

А в-третьих, ты хочешь cout'ом вывести на экран объект...ты уверен, что получится? Может тебе надо вывести скорее какой-то член этого объекта? Ну там, не знаю, что-то типа 
cout<<func(yra).x или как-то так.

А вообще я бы написал функцию вот так:

Код

int Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
    yra.x += (temp.x + temp.y);
    return yra.x;
}


и потом cout<<func(yra);

Прошу господ простить меня за бред, чесслово, я наверно просто не понимаю, что тут нужно...

Это сообщение отредактировал(а) RatHat - 15.2.2010, 00:27
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
Syltan
Дата 15.2.2010, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Вот пробую так как вы сказали.
Код

#include <iostream>
using namespace std;

class Ala{
private: int x; float y;
public: Ala():x(0), y(0) { }
        Ala(int z1, float z2):x(z1),y(z2) {}
        Ala func(Ala yra);
        void get();
};


Ala Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
yra.x += (temp.x + temp.y);
return yra.x;
}

void Ala::get()
{
    cout<<"Результат = "<<func(yra);
}
int main()
{
    Ala e1, e2;
    Ala f(54,22.3);
    e1 = e2.func(f);
    e1.get();
    cin.get();
}



Выдаёт ошибку, что мол проблемма с преобразованием типов.
.\Proba.cpp(18) : warning C4244: '+=' : conversion from 'float' to 'int', possible loss of data


PM MAIL   Вверх
Christoph
Дата 15.2.2010, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: нет
Всего: 11



Код

Ala Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
yra.x += (temp.x + temp.y);
return temp.x;
}


для меня не понятно почему есть доступ у объкта temp к private членам? 

Код

void Ala::get()
{
    cout<<"Результат = "<<func(yra);
}


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


int Ala::func(Ala yra)








--------------------
user posted image
PM MAIL ICQ   Вверх
Dem_max
Дата 15.2.2010, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



может как то так ?
Код

#include <iostream>
using namespace std;

class Ala
{
   private:
      int x;
      float y;

   public:
      Ala():x(0), y(0) { }
      Ala(int z1, float z2):x(z1),y(z2) {}
      int func(Ala yra);
      void get();
      Ala & operator = (const Ala &v);
};

Ala& Ala::operator = (const Ala &v)
{
   this->x = v.x;
   this->y = v.y;
   return *this;
}


int Ala::func(Ala yra)
{
    yra.x = 25;
    yra.y = 35.0;
    return yra.x + yra.y;
}

void Ala::get()
{
    cout << "Result = " << func(*this);
}
int main(int argc, char* argv[])
{

    Ala e1, e2;
    Ala f(54,22.3);
    e1 = e2;
    e1.get();
    cin.get();
    return 0;
}



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
bsa
Дата 15.2.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Christoph @  15.2.2010,  03:27 Найти цитируемый пост)
для меня не понятно почему есть доступ у объкта temp к private членам? 
Методы класса имеют доступ к приватным атрибутам этого же класса.

PM   Вверх
Syltan
Дата 15.2.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Код

может как то так ?


Ваш код не компилится, останавливатся на ретурне.
Вот здесь:

Код

  return yra.x + yra.y;


А если писать так:

Код

#include <iostream>
using namespace std;

class Ala{
private: int x; float y;
public: Ala():x(0), y(0) { }
        Ala(int z1, float z2):x(z1),y(z2) {}
        Ala func(Ala yra);
        void get();
};


Ala Ala::func(Ala yra)
{
    Ala temp;
    temp.x = 25;
    temp.y = 35.0;
yra.x += (temp.x + temp.y);
return temp.x;
}

void Ala::get()
{
    cout<<"Результат = "<<func(yra);
}
int main()
{
    Ala e1, e2;
    Ala f(54,22.3);
    e1 = e2.func(f);
    e1.get();
    cin.get();
}



Останавливается на:
Код

yra.x += (temp.x + temp.y);

PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.