C/C++

Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
Знам колку се досадни задачиве, но шематски се.
getCena враќа број, не враќа адреса или покажувач за после да можеш да смениш тоа што има во таа адреса. Пример имаш цената е 50 , тоа ќе ти врати 50, и ти после пишуваш: 50 = +=50 *100/10 или што и да е..неа смисла, можеш да напишеш setCena( getCena()+getCena() * 50 itn);...тогаш резултатот од пресметката ќе се запише во цена.
Сите променливи да се приватни значи дека сите променливи треба да се ставас во private: и да имаш сет и гет методи за сите :) Не треба да пазиш за тоа туку по дифолт така пишувај ги секад, променливи private, функции public :
И тоа со функцијата не сфатиш баш што бара?
да заборавив, така беше.

А за функцијата за втората задача на крај пишува .
"Потоа да се напише функција која за дадена низа од осигурување ќе го испечати осигуреникот кој платил најголема премија."

знам дека со for циклус ќе се бара од низа тој што највеќе платил ама незнам како точно би изгледало тоа.
 
M

Mr.InF3ction

Гостин
Епа пред циклусот ќе ставиш int index = 0, premija = ( стави да е суманата на првиот, што значи дека од старт предпоставуваш дека првиот платил најмногу и после цело време само бараш поголемо од тоа )
И после внатре ќе провериш дали корисникот со индекс i плаќа поголема премија од premija, ако е така тогаш ставаш index = i, premija = nizaOsigurani.getPremija ( kako i da e toa) и после циклусот ќе печатиш инфромации за nizaOsigurani[index]
 
Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
Кога имам задача со апстрактна класа, со наследување, во нејзините "деца" без разлика дали ми пишува или не секогаш треба да имам конструктор.. копи конструктор деструктор ?
 
Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
Во следнава задача многу ми е важно да ми се разјаснат работиве малку околу функцииве.

Да се напише класа Let која чува информации за: бројот на авионот (цел број), времетраење на летпот во часови (цел брпј), портал на излез од аеродром (низа пд три знаци), број на седишта (цел број), основна цена на летот (реален број) и град кон кој патува (низа пд 20 знаци). За класата да се напишат потребните конструктори и десуруктори. Постојат два типа на летови: локални и интернационални.

Да се напише функција која ја враќа цената на летот соодветна на типот на лет. ( ова virtuel kje bide ?)


За лoкалните летoви дополнително се чува попустот (реален број изразен во проценти) кој ги имаат домашните патници. Исто така се чува информација за тоа дали во летот е вклучено ужина. Цената на локалните летови се пресметува така што евентуалниот попуст се одзема од иницијалната цена.


За интернационалните летови дополнително се чува колку од седиштата припаѓаат на прва класа (цел број), цена на лет во прва класа (реален број), такса која се додава на цената (реален број) и државата на слетување (низа пд 30 знаци). Цената за интернационалните летови се пресметува така што се зема средна вредност од цената во прва класа и втора класа на која се додава цената од таксата.

Надвор од класите да се напише функција najevtina_ponuda() која како аргумент добива листа од летови (независни од типот) и како резултат на екран ги печати информациите за летпт кој е најевтин.

http://codepad.org/Knjr95Wk (eve go kodot )


Многу ме интересира дали функциите се така како што сум ги напишал и ми е од голема важност.
Да се напише функција која ја враќа цената на летот соодветна на типот на лет.
Дали е ова ова кажува дека е виртуел?? (kako sto mi e napisano)

потоа тие со Cena, и зошто пак ми наоѓа грешка во функцијата void cena() .. getcena() ???

И дали ми е точна функцијата најевтина_понуда , ако не како изгледа поправениот код :\
 
M

Mr.InF3ction

Гостин
Кога имам задача со апстрактна класа, со наследување, во нејзините "деца" без разлика дали ми пишува или не секогаш треба да имам конструктор.. копи конструктор деструктор ?
Ако немаш конструктор како ќе направиш објект от таа класа?
Значи на некоја задача ако вика да направиш класа не е битно дали наследува од некоја друга класа или не, идеш како процедура :; сите променливи ги ставаш private, правиш set / get методи, функците ги пишуваш како public и веднаш куцај конструктор без параметри, со параметри и деструктор, а за copy конструктор не мораш, освен ако не бара задачата.
--- надополнето: 19 јануари 2013 во 17:08 ---
А за тоа која функција е виртуелна не се кажува на задачите, туку треба сам да фатиш која е. И ќе имаш потреба од виртуелна функција кога има некоја основна класа и од таа класа наследуваат повеќе класи и сите имаат една заедничка фунцкионалност(функција) но сите ја вршат таа работа на друг начин, твојот случај пресметка на цена. Затоа некоја функција presmetajCena или како и да е ќе биде виртуелна или чиста виртуелна (разликата е дека ако е чиста вертуелна класите што ќе наследат МОРААТ да ја преоптоварат оваа функција ),

Инаку ти јавува грешка затоа што немаш set i get методи, друго се е ок. А таа функција за најефтина понуда е ок, само за да ти работи cout<< x ќе треба да преоптовариш <<
 
Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
A да ми работи cout<<x .. без да го преоптоварам << место x што треба да напишам ? или мора да се преоптовари?

и според тоа што ми го кажа.. тоа значи дека
virtual float premija()=0; ми е точно :) odnosno тоа е функциоја која ја враќа цената на летот соодветна на типот за лет?


.... ИИ.. да се осигурам себеси , во најевтина_понуда
Let &x; // zatoa sto nemozeme da pravime objekti od Let, zatoa ima & ?
и ова мие точно ?
исто и Let &lista taka se def kako vlezen argument?

btw морам вака да прашувам затоа што со пример најубаво ми се објаснува т.е ми влева сигурност.

(povekje na pamet go ucam predmetov)
 
M

Mr.InF3ction

Гостин
cout << работи со основни податочни типови и string, па затоа треба да вратиш нешто такво од стилот :
cout << x.getNesto() << << x.getNestoDrugo();

И да точно ти е тоа со чиста виртуелна функција. Секогаш е иста процедура во главната класа ставаш една или повеќе функции да се чисти виртуелни и после само ги преоптоваруваш во изведените класи.

Да можеш да правиш Let &x бидејќи со тоа креираш рефернца што ќе покажува на објект од типот Let, a реално не можеш да направиш објект од типот Let (Let x) но затоа локални и интер. летови ..се изведени од класата Let и може да покажува на тие.

Инаку слободно прашувај не ми смета да објаснам или друг да објасни уште поубаво :pos: ...дури и се потсетувам и ја одамна немам чепнато c++ :icon_lol:
 
Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
Прашувам вакви прости прашања зошто се што знам ми е кажано од некој и од решени задачи немам ништо прочитано од скриптите од факултет а незнам дали ќе имам време за тоа, може набрзина само да пролистам.
--- надополнето: 19 јануари 2013 во 21:51 ---
т.е мислам дека знам, ако ни е потребно во другите класи да земеме некој приватен аргумент ни е потребно get.. или ако сакаме да го промениме сет и во зависност од тоа дали ќе ни треба ние ќе го пишеме или не.

А друга работа е ако во самата задача ти пише дали да ги пишеш безпотребно или не. :) ваљда е вака
 
M

Mr.InF3ction

Гостин
Па гет и сет методи треба да имаш за сите податоци во класата. Ако во главната класа имаш сет и гет за сите, во изведена класа ќе треба да направиш само податоците што се на новата класа.
А за кодот прво ќе избришеш со delete [] niza, и после се исто :)

едит: е така како што кажа горе, ако треба да земеш или смениш приватен член ги креираш тие мотоди но ја лично како добра праска препорачуам одма да ги куцаш не се тешки, ама после во решавањето на задачи ќе ти олесне работа , нема да има потрба да се враќаш да додаваш код..сепак тоа е до тебе, за испит ако мислиш дека нема потреба не губи време со тоа :)
инаку ти средив мислњето ама изгледа пред мене реагираше па се поремети xD
 
Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
Задачава ја решив, пак ми јавува грешка на 51 линија незнам зошто. Другите грешки поради таа неможам да ги видам.

Друго што ме интересира е дали операторот + ми е добро оптоварен. Затоа што во скриптите налетав дека .. подруго се пишуваат и ме збуни.
Јас со friend знам дека се пишува само виртуалната функција и ostream << (za pecatenje). А во скриптите има вакви функции што во испитните незнам дали ќе ми требаат.

Т.е кога ќе ми требаат овие воопшто ??(И КОГА)

friend sijalicka operator + (const & a,const & b)
{ sijalicka c; (ваква пишува во скрипта)
c.wat=a.wat+b.wat;
return c;
}
исто пишува дека овие оператори се пишуваат надвор од класите :O (јас сите оператори внатре ги пишувам само некои функции може надвор)Мене вакво оптоварување на оператор не ми кажале и ме збуни. Јас знам како што ми е напишано во задачата(подолу). Ако не ми треба воопшто не сакам да си комплицирам xD (Ako mi e tocna zadacata)

А јас вака си го пишувам

Sijalicka & operator+(Sijalicka & x)
{
wat+=x.wat;
return *this;
}

Може да ми се укаже кај се имам грешки во кодот..




Да се дефинира класа Sijalicka, во која се чуваат информации за:
- бојата на сијаличката (поле од 20 знаци),
- моќноста на сијаличкта изразена во Вати (float),

За потребите на оваа класа да се напишат
- преоптоварен конструктор со два аргументи, copy конструктор
- set и get методи
- операторот << за проследување на ostream (печатење) на објект од класата Sijalicka (се печати само бојата на сијаличката).
- оператор ++ (postfix) нотација кој ја зголемува моќноста на сијаличката за еден Ват.
- оператор +, за собирање на моќностите на два објекти од класата Sijalicka.

Дополнително да се креира класа NovogodisniSijalicki во која ќе се чува динамичко алоцирано поле од објекти од класата Sijalicka и бројот на објекти кои се чуваат во полето. За оваа класа да се преоптоварат:
- унарниот оператор += коj се однесува на додавање на нов објект во рамките на полето
- операторот << за проследување на ostream (печатење) на боите со кои светат сијаличките (ако се знае дека прво светат сијаличките кои се наоѓаат на непарна позиција а потоа оние кои се наоѓаат на парните позиции во низата).
пр. низата од сијалички е составена на следниов начин:
црвена жолта плава црвена зелена плава окер виолетова
операторот треба да испечати:
црвена плава зелена окер - жолта црвена плава виолетова



http://codepad.org/1a0jQl93 (еве го кодот)
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Задачава ја решив, пак ми јавува грешка на 51 линија незнам зошто. Другите грешки поради таа неможам да ги видам.

Друго што ме интересира е дали операторот + ми е добро оптоварен.
Јас со friend знам дека се пишува само виртуалната функција и ostream << (za pecatenje). А во скриптите има вакви функции што во испитните незнам дали ќе ми требаат.

Т.е кога ќе ми требаат овие воопшто ??(И КОГА)

friend sijalicka operator + (const & a,const & b)
{ sijalicka c; (ваква пишува во скрипта)
c.wat=a.wat+b.wat;
return c;
}
исто пишува дека овие оператори се пишуваат надвор од класите :O

А јас вака си го пишувам

Sijalicka & operator+(Sijalicka & x)
{
wat+=x.wat;
return *this;
}

Може да ми се укаже кај се имам грешки во кодот..
На 51 ред имаш грешка зашто за класата Sijalicka немаш default конструктор (без параметри) и заради тоа неможеш да создадеш низа од тие објекти. Дефинирај во класата еден таков и ќе работи.

Операторот + ти е таман, иначе со friend не се пишува само виртуелна и ostream << функција (виртуелна мислам дека нема никаква врска со friend) него каква и да сакаш, ти си ја дефинираш. Функциите friend многу се користат за преоптоварување оператори но не би требало да ве тормозат на испит нешто ептен за нив. Работата со нив е што тие не се функции на класот, туку се надворешни (глобални) функции кој што имаат привилегиран достап до класот за кој се пријателски, така да можат да променуваат и private членови без проблем. Зашто се надворешни, нив неможеш да ги извикаш преку објект ( со операторите . или -> ). Не вклучуваат this покажувач и затоа мора (за бинарен оператор како операторот +) двата објекта да се предадат како параметри и првиот параметар ќе биде објектот од лево на знакот, а вториот, тој од десно на знакот. Доброто тука е што од левата страна не мора секогаш да има објект за кој што е пеоптоварен операторот, туку ти си определуваш.
На пример еве за оваа класа.

Код:
class A
{
    int n;
public:
    A operator+(int num) { n += num; }
};
 
int main()
{
    A ob1, ob2;
    ob2 = ob1 + 10;   //коректно
    ob2 = 10 + ob1;   //не коректно
}
Тука грешката ќе е зашто од левата страна на плусот секогаш треба да стои објект. Е со friend можеш да го преоптовариш така што да не прави проблеми.

Код:
class A
{
    int n;
public:
    friend A operator+ (int num, A ob);
    friend A operator+ (A ob, int num);
};
А ќе бидат преобтоварени како што имаш напишано горе.
 
Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
Имам два кода за задачава еден решен незнам од каде еден јас што го пишував како знам.

Кодот решен .. еве го внатре е и текстот .. http://codepad.org/VUa7mHB1

Незнам колку е точен ама имам прашања зошто нешто ме буни.

Пишува
Za sekoj objekt od dvete izvedeni klasi treba da bidat raspolozlivi slednive meodi:

(и еден од тие е ..) - preoptovaruvanje na == spored imeto na proizvoditelot

И во решената задача е напишана friend функција во самата
класа, со нејзини аргументи (во двете класи).

што ми е малку чудно.. мислев да не треба да се деф
таа функција во главната класа?

А па со функцијата pecati e obratno.. напишана е во главната
функција .. а јас ги напишав во "децата" а во главната ми е како
virtual.

Eve go mojot kod http://codepad.org/wcbQQ4KL

КАКО Е ТОЧНО ? (btw funkcijata cena moze da se zanemari znam deka imam greski.)
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Za sekoj objekt od dvete izvedeni klasi treba da bidat raspolozlivi slednive meodi:

(и еден од тие е ..) - preoptovaruvanje na == spored imeto na proizvoditelot

И во решената задача е напишана friend функција во самата
класа, со нејзини аргументи (во двете класи).

што ми е малку чудно.. мислев да не треба да се деф
таа функција во главната класа?

А па со функцијата pecati e obratno.. напишана е во главната
функција .. а јас ги напишав во "децата" а во главната ми е како
virtual.

КАКО Е ТОЧНО ?
Абстрактната класа не представува завршен тип и единствената цел и е да биде наследувана. Затоа телото на функцијата print во класата Disc нема никаква улога. Таа функција никогаш нема да можеш да ја извикаш од Disc. print треба да е чисто виртуелна функција.

Преоптоварувањето на операторот == е грешно ако е оставено вака. Треба да споредува според произведител, а и CD и BlueRay може да бидат споредени. Но == е преоптоварен да споредува само CD со CD и само BlueRay со BlueRay. Ако сакаш да споредиш BlueRay со CD треба да направиш уште едно преоптоварување со friend функциja и треба да пазиш кога споредуваш секогаш од десната страна да ти е BlueRay објект (прашањето што ти беше од минатиот пост). Ако сакаш да има од лева страна објект CD треба уште една предефиниција итн... За да не се тормозиш со волку пишување, го правиш и операторот== virtual во класата Disc и тераш, како што веројатно и на испит ќе треба да ти е напишано.
 
Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
Абстрактната класа не представува завршен тип и единствената цел и е да биде наследувана. Затоа телото на функцијата print во класата Disc нема никаква улога. Таа функција никогаш нема да можеш да ја извикаш од Disc. print треба да е чисто виртуелна функција.
Toa значи дека http://codepad.org/wcbQQ4KL овој код ми е точен? (печатењето?)



Преоптоварувањето на операторот == е грешно ако е оставено вака. Треба да споредува според произведител, а и CD и BlueRay може да бидат споредени. Но == е преоптоварен да споредува само CD со CD и само BlueRay со BlueRay. Ако сакаш да споредиш BlueRay со CD треба да направиш уште едно преоптоварување со friend функциja и треба да пазиш кога споредуваш секогаш од десната страна да ти е BlueRay објект (прашањето што ти беше од минатиот пост). Ако сакаш да има од лева страна објект CD треба уште една предефиниција итн... За да не се тормозиш со волку пишување, го правиш и операторот== virtual во класата Disc и тераш, како што веројатно и на испит ќе треба да ти е напишано.
ova so операторот == не го сфатив баш дали е точно како едниот код или како другиот .. тоа ме интересира, како изгледа тоа во код зошто вака на објаснување многу слабо ми се разјаснува. Ако сакаш стави го во еден од кодовите како треба да биде. и paste :\
--- надополнето: 20 јануари 2013 во 18:30 ---
Ako делот со преоптоварување на == во задачава е точен. Тогаш мислам дека ми е јасно.

Само во задачава кај == операторот употребува get.. а се наоѓа во истата класа :\ точно е ?

-кој споредува два објекти од класата Авион во атрибутот број на седишта.
PHP:
#include<iostream>
#include<stdlib.h>
using namespace std;
class Avion
{
      char pr[20];
      char *tip;
      int br;
      public:
            Avion(char *p="", char *t="", int b=0)
            {
                        strncpy(pr,p,19); pr[19]=0;
                        tip=new char[strlen(t)+1];
                        strcpy(tip,t);
                        br=b;
            }
         
            Avion(Avion &a)
            {
                        strcpy(pr,a.pr);
                        tip=new char[strlen(a.tip)+1];
                        strcpy(tip,a.tip);
                        br=a.br;
            }
         
            Avion operator=(Avion &av)
            {
                  if(this!=&av)
                  {
                        strcpy(pr,av.pr);
                        tip=new char[strlen(av.tip)+1];
                        strcpy(tip,av.tip);
                        br=av.br;
                  }
                  return *this;
            }
         
            ~Avion() {delete [] tip;}
         
            void setbr(int b) {br=b;}
            int getbr()      {return br;}
         
            friend ostream& operator<<(ostream &out, Avion &a)
            {
              return out<<"Proizvoditel: "<<a.pr
                        <<"Tip: "<<a.tip
                        <<"Tip: "<<a.br<<endl;
            }
         
            friend bool operator==(Avion &a1, Avion &a2)
            {
                    return(a1.getbr()==a2.getbr());
            }
};
class Aviokompanija
{
      Avion *a;
      int br;
      public:
            Aviokompanija(Avion *av, int b)
            {
                          br=b;
                          a=new Avion[b];
                          for(int i=0;i<br;i++)
                          a[i]=av[i];
            }
         
            Aviokompanija(Aviokompanija &ak)
            {
                          br=ak.br;
                          a=new Avion[ak.br];
                          for(int i=0;i<ak.br;i++)
                          a[i]=ak.a[i];
            }
            ~Aviokompanija() {delete [] a;}
         
            Aviokompanija &operator+=(Avion &av)
            {
                    Avion *t;
                    t=new Avion[br+1];
                    for(int i=0;i<br;i++)
                    t[i]=a[i];
                    delete [] a;
                    t[br++]=av;
                    a=t;
                    delete [] t;
                    return *this;
            }
};
int main()
{
return 0;
}
 
Член од
5 јануари 2008
Мислења
2.801
Поени од реакции
3.053
Дали овие два кодови се исти ? ова е оператор префикс.
Едното е со set другото дирекно?

Очекувам Одговор со да или не :LOL:

PHP:
  SilenHeroj &operator++()
            {
                  sete(getе()+10);
                  setp(getp()+5);
                  setl(getl()+1);
                  setinte(inte+1)
                  return *this;
            }
PHP:
IHeroj & operator++()
      {
          getl()++;
          gete()+=10;
          getp()+=5;
          inte++;
          return *this;
       
      }
 

Kajgana Shop

На врв Bottom