Pereiti prie turinio

Trumpas C++ klausimas


Rekomenduojami pranešimai

Sveiki, kai bandau duomenis surasyti i nauja objekta man po kiekvieno neigiamo skaiciaus (ploto) iraso i masyva 0. Kodel?

Duomenys:

8

Butas 3

Namas -1

baseinas 3

Dels 8

Bu546tas 3

Namas -1

baseinas -3

De4llas -8

#include <iostream>
#include <string>
#include <fstream>

using namespace std;
const string CD = "Duomenys.txt";

class Sklypas{
private:
string adresas;
int plotas;
public:
Sklypas():adresas(""), plotas(0){}
Sklypas(string adresas, int plotas):
	adresas(adresas), plotas(plotas){}
void Deti(string adresas, int plotas);
string ImtiAdresas(){return adresas;}
int ImtiPlotas(){return plotas;}
};

void Sklypas::Deti(string adresas, int plotas){
 Sklypas::adresas = adresas;
 Sklypas::plotas = plotas;
}

class Sklypai{
public:
static const int CMAX = 100;
private:
Sklypas Skl[CMAX];
int ns;
public:
Sklypai():ns(0){}
Sklypai(int ns):
	ns(ns){}
Sklypas ImtiEl(int kuris){return Skl[kuris];}
int ImtiN(){return ns;}
void DetiEl(Sklypas s1){Skl[ns++] = s1;}
};

void Skaityti(Sklypai & S, int & n);
void Tikrinti(Sklypai & S, Sklypai & N, int n);
void Iterpimas(Sklypai & S, int Mas[]);

int main(){
Sklypai S, N;
int n;
int Mas[] = {-2, 7, 93, -14, -3, 12, 71, 63, -5};

Skaityti(S, n);
Tikrinti(S, N, n);
Iterpimas(S, Mas);

system("pause");
return 0;
}

void Skaityti(Sklypai & S, int & n){
ifstream fd(CD);
int kiek;
string pavadinimas;
Sklypas Sklyp;
fd >> n;
for(int i=0; i<n; i++){
	fd >> pavadinimas >> kiek;
	Sklyp.Deti(pavadinimas, kiek);
	S.DetiEl(Sklyp);
}
fd.close();
}

void Tikrinti(Sklypai & S, Sklypai & N, int n){
for(int i=0; i<S.ImtiN(); i++){
	if(S.ImtiEl(i).ImtiPlotas() > 0){
		N.DetiEl(S.ImtiEl(i));
		//cout << N.ImtiEl(i).ImtiAdresas() << " " << N.ImtiEl(i).ImtiPlotas() << endl;
	}
}
}

Redagavo saltis77
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dekui uz atsakyma. Idejau pilna koda. Bet kas negerai nezinau. Tokios bedos anksciau niekada nera buve.

 

Įterpimą pamiršai, verkia dėl to man

 

 

...man po kiekvieno neigiamo skaiciaus (ploto) iraso i masyva 0....

 

 for(int i=0; i<S.ImtiN(); i++){
               if(S.ImtiEl(i).ImtiPlotas() > 0){
                       N.DetiEl(S.ImtiEl(i));

 

Emi iš S, tikrinti ar plotas yra teigiamas, ir jei taip, tuomet perkeli į N. Taip kad viskas gerai su tuo nulio įrašymu... Tai default reikšmė yra

Redagavo Plutonium
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Neseniai pradejau ziureti klasiu paveldimuma ir isvestineje klaseje KrAuto noriu naudoti bool operatoriu.

class Auto{
private:
string pavadinimas;
int kaina;
public:
Auto():pavadinimas(""), kaina(0){}
Auto(string pavadinimas, int kaina):
	pavadinimas(pavadinimas), kaina(kaina){}
~Auto() {}
void Deti(string pavadinimas, int kaina);
string ImtiPavadinimas(){return pavadinimas;}
int ImtiKaina(){return kaina;}
};

void Auto::Deti(string pavadinimas, int kaina){
 Auto::pavadinimas = pavadinimas;
 Auto::kaina = kaina;
}

class KrAuto : public Auto{
private:
double galia;
int kiekis;
public:
KrAuto():galia(0.0), kiekis(0){}
KrAuto(double galia, int kiekis):
	galia(galia), kiekis(kiekis){}
void Detigk(double galia, int kiekis);
double ImtiGalia(){return galia;}
int ImtiKiekis(){return kiekis;}
bool operator > (const KrAuto & kitas);
};

void KrAuto::Detigk(double galia, int kiekis){
 KrAuto::galia = galia;
 KrAuto::kiekis = kiekis;
}

bool KrAuto::operator > (const KrAuto & kitas){
return (ImtiKaina() > kitas.ImtiKaina()) || 
	(ImtiKaina() == kitas.ImtiKaina()) &&
	  (galia > kitas.galia);
}

Kompiliatorius braukia raudonai zodi kitas ir meta

the object has type qualifiers that are not compatible with the member function
Kas negerai? Gal toje pagrindineje klaseje kazka reikejo pakeisti ar apskritai negalima naudoti bool operatoriu isvestinese klasese?

bool KrAuto::operator > (const KrAuto & kitas){

return (ImtiKaina() > kitas.ImtiKaina()) ||

(ImtiKaina() == kitas.ImtiKaina()) &&

(galia > kitas.galia);

}

 

VISKA SUSITVARKIAU PAPRASCIAUSIAI NUEMES CONST PRIE KrAuto!!! Kodel ji nera tinkama?

Redagavo saltis77
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Neseniai pradejau ziureti klasiu paveldimuma ir isvestineje klaseje KrAuto noriu naudoti bool operatoriu.

class Auto{
private:
string pavadinimas;
int kaina;
public:
Auto():pavadinimas(""), kaina(0){}
Auto(string pavadinimas, int kaina):
	pavadinimas(pavadinimas), kaina(kaina){}
~Auto() {}
void Deti(string pavadinimas, int kaina);
string ImtiPavadinimas(){return pavadinimas;}
int ImtiKaina(){return kaina;}
};

void Auto::Deti(string pavadinimas, int kaina){
 Auto::pavadinimas = pavadinimas;
 Auto::kaina = kaina;
}

class KrAuto : public Auto{
private:
double galia;
int kiekis;
public:
KrAuto():galia(0.0), kiekis(0){}
KrAuto(double galia, int kiekis):
	galia(galia), kiekis(kiekis){}
void Detigk(double galia, int kiekis);
double ImtiGalia(){return galia;}
int ImtiKiekis(){return kiekis;}
bool operator > (const KrAuto & kitas);
};

void KrAuto::Detigk(double galia, int kiekis){
 KrAuto::galia = galia;
 KrAuto::kiekis = kiekis;
}

bool KrAuto::operator > (const KrAuto & kitas){
return (ImtiKaina() > kitas.ImtiKaina()) || 
	(ImtiKaina() == kitas.ImtiKaina()) &&
	  (galia > kitas.galia);
}

Kompiliatorius braukia raudonai zodi kitas ir meta

Kas negerai? Gal toje pagrindineje klaseje kazka reikejo pakeisti ar apskritai negalima naudoti bool operatoriu isvestinese klasese?

bool KrAuto::operator > (const KrAuto & kitas){

return (ImtiKaina() > kitas.ImtiKaina()) ||

(ImtiKaina() == kitas.ImtiKaina()) &&

(galia > kitas.galia);

}

 

VISKA SUSITVARKIAU PAPRASCIAUSIAI NUEMES CONST PRIE KrAuto!!! Kodel ji nera tinkama?

 

nes kai const yra tai reikšmė negali būti keičiama, o tavo aveju paduoda viena reikšmė, o po to per parametrą grąžina pakeistą reikšmę

Nuoroda į pranešimą
Dalintis kituose puslapiuose

babunas dekui. Yra nauja problema vel su isvestinem klasem.

#include <iostream>
#include <string>

using namespace std;

class Zmogus{
private:
string vardas;
int amzius;
public:
Zmogus(string vardas, int amzius):
	vardas(vardas), amzius(amzius){}
void Deti(string vardas, int amzius);
void Isvesti();
void Imti(string & vardas, int & amzius);
};

void Zmogus::Isvesti(){
cout << vardas << " yra " << amzius << endl;
}

void Zmogus::Imti(string & vardas, int & amzius){
 Zmogus::vardas = vardas;
 Zmogus::amzius = amzius;
}

class Sportininkas: public Zmogus{
public:
Sportininkas(string vardas, int amzius):
	Zmogus(vardas, amzius){}
void Isvesti();
};

void Sportininkas::Isvesti(){
string vardas;
int amzius;

Imti(vardas, amzius);

cout << vardas << " (" << amzius << " m.) ";
cout << "yra sportininkas." << endl;
}

class Lengvaatletis: public Sportininkas{
private:
string rungtis; // yra
double rekordas; // yra
string matas; // yra
public:
Lengvaatletis(string vardas, int  amzius, string rungtis, double rekordas, string matas):
	Sportininkas(vardas, amzius),
	rungtis(rungtis), rekordas(rekordas), matas(matas){}
void Isvesti();
};

void Lengvaatletis::Isvesti(){
Sportininkas::Isvesti();

cout << "Sporto saka: lengvoji atletika" << endl;
cout << "Rungtis: " << rungtis << endl;
cout << "Asmeninis rekordas: " << rekordas;
cout << " " << matas << endl << endl;
}

class Krepsininkas: public Sportininkas{
private:
string pozicija;
int ugis;
public:
Krepsininkas(string vardas, int amzius, string pozicija, int ugis):
	Sportininkas(vardas, amzius),
	pozicija(pozicija), ugis(ugis){}
void Isvesti();
};

void Krepsininkas::Isvesti(){
	 Sportininkas::Isvesti();

 cout << "Sporto šaka: krepšinis" << endl;
 cout << "Ūgis: " << ugis << " cm" << endl;
 cout << "Žaidimo pozicija: ";
 cout << pozicija << endl << endl;
}

int main(){

Lengvaatletis Aurimas("Aurimas", 22, "disko metimas", 5.3, "m");
Lengvaatletis Tomas("Tomas", 21, "100 m. begimas", 12.3, "s");
Krepsininkas Daukantas("Daukantas", 19, "Atakuojantis gybejas", 190);

Aurimas.Isvesti();
Tomas.Isvesti();
Daukantas.Isvesti();

Aurimas.Zmogus::Isvesti();

system("pause");
return 0;
}

Kodel niekaip nepadeda vardo ir metu (visa kita veikia) as sakau kad del Imti metodu o kambariokas sako kad kazkodel i klase Lengvaatletis neatkeliauja duomenys? kaip yra is tikro?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Lengvaatletis Aurimas("Aurimas", 22, "disko metimas", 5.3, "m");

Taip C++ susikuria naujas objektas? Aš visada naudodavau Klasė * objectName = new Klasė(parametrai)...

Esmė kad vis dar išmok debuginti. Užsidedi break point ties "Imti" ir suprasi ar kasnors ten kinta ;) Debuginimo tutorial, tikrai geras dalykas, nesuprantu kaip anskčiau be jo dirbti galėjau :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...