Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2009, 19:26   #1
ss87neo
 
Регистрация: 12.12.2009
Сообщений: 3
По умолчанию get

Код:
#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
#include <stddef.h>
  class seaM
  {
        protected:
                int pol,periodz,currentv;
                double massa;
        public:
                seaM(int pol1=1,int periodz1=10,int currentv1=1,double massa1=1)
                {
                pol=pol1;
                periodz=periodz1;
                currentv=currentv1;
                massa=massa1;
                }
              ~seaM(){};
                //pol=1-мужчина,pol=0-женщина:
                int getpol()
                {
                        return pol;
                }
                int getperiodz()
                {
                        return periodz;
                }
                int getcurrentv()
                {
                        return currentv;
люди добрые подскажите пожалуйста не сильно знаешему С++ что означает выделенная строчка,а особенно интересует get(выделен курсивом)БУду очень признателен!!

Последний раз редактировалось Sazary; 13.12.2009 в 04:33.
ss87neo вне форума Ответить с цитированием
Старый 12.12.2009, 19:31   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Эта строка лишена всякого смысла.

А хотя, я в вашем коде не заметил, что это функция, объявленная в классе (я решил, что это вы так криво написали get(pol))
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 12.12.2009 в 21:11.
ROD вне форума Ответить с цитированием
Старый 12.12.2009, 19:36   #3
ss87neo
 
Регистрация: 12.12.2009
Сообщений: 3
По умолчанию Вот полный текст программы

Код:
#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
#include <stddef.h>
  class seaM
  {
        protected:
                int pol,periodz,currentv;
                double massa;
        public:
                seaM(int pol1=1,int periodz1=10,int currentv1=1,double massa1=1)
                {
                pol=pol1;
                periodz=periodz1;
                currentv=currentv1;
                massa=massa1;
                }
                ~seaM(){};
                //pol=1-мужчина,pol=0-женщина:
                int getpol()
                {
                        return pol;
                }
                int getperiodz()
                {
                        return periodz;
                }
                int getcurrentv()
                {
                        return currentv;
                }
                double getmassa()
                {
                        return massa;
                }
                int setpol(int p)
                {
                        pol=p;
                        return p;
                }
                int setperiodz(int z)
                {
                        periodz=z;
                        return z;
                }
                int setcurrentv (int v)
                {
                        currentv=v;
                        return v;
                }
                double setmassa (double a)
                {
                        massa=massa+a;
                        return a;
                }
                int islive()               //1-жив,0-мертв
                {
                        if (currentv<periodz)
                                        return 1;
                                else
                                        return 0;
                }
                int nextv()
                {
                        currentv=currentv+1;
                        return currentv;
                }
                virtual double pitanie(double mp)
                {
                        massa=massa+mp;
                        return massa;
                }
};

class delphin:  public seaM
{
        private:
                int sleep; //1-спит,0-не спит
        public:
                delphin(int pol2=1,int currentv2=1,double massa2=1)
                {
                        pol=pol2;
                        periodz=10;
                        currentv=currentv2;
                        massa=massa2;
                }
                int getsleep()
                {
                        return sleep;
                }
                int setsleep(int x)
                {
                        sleep=x;
                        return sleep;
                }
                virtual double pitanie(double mp)
                {
                        massa=massa+(mp/2);
                        return massa;
                }
                friend ostream& operator<<(ostream& o,delphin& b)
                {
                 o<<"delphin";
                 if(b.getsleep()==1)
                        o<<"Spit \n";
                 else
                        o<<"Bodriak \n";
                 o<<"Vozrast="<<b.getcurrentv();
                 o<<"\n pol="<<b.getpol();
                 o<<"\n massa="<<b.getmassa();
                 return o;
               }


};


class okyn:public seaM
{
        private:
                int hungry;
        public:
                okyn(int pol3=1,int periodz3=8,int currentv3=1,double massa3=1)
                {
                pol=pol3;
                periodz=periodz3;
                currentv=currentv3;
                massa=massa3;
                }

                //метод голоден или нет
                //голоден=1,сыт=0
                 int gethungry()
                {
                        return hungry;
                }
                int sethungry(int x)
                {
                        hungry=1;
                                return hungry;
                }
                virtual double pitanie(double mp)
                {
                        massa=massa+(2/3*mp);
                        return massa;
                }
                friend ostream& operator<<(ostream& oo,okyn& r)
                {
                 oo<<"okyn";
                 if(r.gethungry()==1)
                        oo<<"Spit \n";
                 else
                        oo<<"Bodriak \n";
                 oo<<"\nVozrast="<<r.getcurrentv();
                 oo<<"\n pol="<<r.getpol();
                 oo<<"\n massa="<<r.getmassa();
                 return oo;

               }
};
double  randAB(int A,int B)
{
        //and(Time(Null));
        return A+(B-A)*(random(100))/100;
};

Последний раз редактировалось Sazary; 13.12.2009 в 04:33.
ss87neo вне форума Ответить с цитированием
Старый 12.12.2009, 19:37   #4
ss87neo
 
Регистрация: 12.12.2009
Сообщений: 3
По умолчанию вот окончание

Код:
#pragma argsused
int main(int argc, char* argv[])
{

        int kolok,koldelf,n;

        delphin *delf;
        okyn *ok;

        cout<<"Vvedite kol-vo delphinov=";
        cin>>koldelf;
        cout<<"Vvedite kol-vo okynei=";
        cin>>kolok;

        delf=new delphin[koldelf];
        if(delf==NULL)
                return 1;

        ok=new okyn[kolok];
        if(ok==NULL)
                return 1;

        for(int i=0;i<koldelf;i++)
        {
                delf[i].setpol(randAB(0,1));
                delf[i].setmassa(randAB(0,200));
                delf[i].setcurrentv(randAB(0,10));
                delf[i].setsleep(randAB(0,1));
        }
        for(int  i=0;i<kolok;i++)
        {
                ok[i].setpol(randAB(0,1));
                ok[i].setmassa(randAB(0,300));
                ok[i].setcurrentv(randAB(0,8));
                ok[i].sethungry(randAB(0,1));
        }
        for(int i=0;i<koldelf;i++)
                cout<<delf[i];
        for(int i=0;i<kolok;i++)
                cout<<ok[i];
        return 0;
}

Последний раз редактировалось Sazary; 13.12.2009 в 04:33.
ss87neo вне форума Ответить с цитированием
Старый 12.12.2009, 19:40   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

в силу отсутствия "свойств" в C++, для доступа к переменным, находящимся в private или protected секции класса делают вот такие вот ф-ции установки и получения значения( в вашем случае это getpol и setpol )
netrino вне форума Ответить с цитированием
Старый 12.12.2009, 19:46   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
в силу отсутствия "свойств" в C++, для доступа к переменным, находящимся в private или protected секции класса делают вот такие вот ф-ции установки и получения значения( в вашем случае это getpol и setpol )
Сначала после дельфи тоже думал, что теперь делать то. Ток странно, кто пишет программу ? Кто использует эти классы ? Вы. Именно... так почему все не в паблик делать, что даст:
1. Быстрый (прямой) доступ к данным класса
2. А если нужно уже что-то большое делать с ними, то тогда можно и методы класса писать.
BOBAH13 вне форума Ответить с цитированием
Старый 12.12.2009, 20:01   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Да, согласен, но вся проблема в принципах ООП(сокрытие деталей реализации) и как раз в том, что чаще всего требуется делать что-то большее ) например проверку полученного значения. Сам я на делфи не программировал, потому это подобный стиль для меня, скажем так, "родной" ) Да и не факт, что в будущем только я буду использовать написанный мною класс, потому следует придерживаться общепринятого стиля. Когда-то из интереса сделал нечто вроде свойств из делфи в виде шаблона property, в котором перегружал оператор "=" и оператор приведения, тот ещё костыль, зато выглядело почти как в делфи
netrino вне форума Ответить с цитированием
Старый 12.12.2009, 20:57   #8
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

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

например если есть класс который умножает А на Б, то вместо методов
SetA(), SetB(), УмножитьИВернуть() ;
лучше сделать метод который примет в аргументы эти А и Б, а уже внутри него вызывать СетА и СетБ, перемножить проверенные данные и вернуть результат

т.е СетА и СетБ сами могут быть приватными, а пользователь класса вообще не подозревает что творится в классе
m0nax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц