Wątek przeniesiony 2016-05-13 11:13 z C/C++ przez ŁF.

Tworzenie konstruuktora destruktora i funkcji

0

Witajcie znam trochę teorię i czytałem jak to działa ale jakoś za bardzo nie jestem pewien jak się do tego zabrać mam kawałek programu napisanego w C++ który sam napisałem przy pomocy książek i internetu lecz zatrzymałem się na funkcji. Mój program wyglada tak

#include "stdafx.h"
#include <string>

using namespace std;
class pojazd
{
public:
	int masa, predkosc;
	string marka;
	int przyspieszenie() {
		return masa / predkosc;
	}
	pojazd(string marka) {
		this->marka = marka;
	}
	
	class rower : public pojazd {
	public:
		int id;
		int masa;
		int przyspieszenie()
		{
			return masa* predkosc;
		};
		rower(string marka, int id, int masa): pojazd (marka){
			this->masa = masa;
			this->przyspieszenie = przyspieszenie;

int main()
{
	pojazd *rower = new pojazd("romet");
	pojazd->wprowadzwartosc("romet", 95055, 500);
	cout << "romet"

    return 0;
}

Czy dobrze jest wykonany ten kawałek programu czy funkcja przyspieszenie jest dobrze rozpoczęta? Jak Wiem pewnie są błedy i to jakieś głupie. Ale programuję jak za karę na studiach.. No ale niestey jakoś tak idzie. Wiem że destruktor tworzy sie w taki sposób ~nazwafunkci ale nie zbyt to zadziała w taki sposób bo w kodzie są błedy... Jakieś wskazówki?

2

Ten program się nie kompiluje. Co chcesz osiągnąć?

Temat nadaje się do Newbie

0

Klamerek ci brakuje.
Albo jestem ślepy, albo nie masz metody wprowadzwartosc().
Destruktor tworzysz tak:

~pojazd()
{
    //tutaj kod
}

:)

0
kq napisał(a):

Ten program się nie kompiluje. Co chcesz osiągnąć?

Temat nadaje się do Newbie

Bardzo możliwe że się nadaje do tego działu. Chcę aby program miał klasę pojazd oraz 2-3 klasy dziedziczące po niej ale każda co innego. Oraz chcę aby w programie był konstruktor i destruktor czy w ogóle dobrze cokolwiek zacząłem?

0

Twoj program sie nie kompiluje w takiej wersji jakiej jest. A to co chcesz zrobic jest w prawie kazdym tutorialu odnosnie C++ i programowania obiektowego. I nie, Twoj program nie jest dobry. Dobrze takze nie zaczales. poczytaj zanim bedziesz szedl z motyka na slonce

0

Weźcie zamknijcie ten temat bo za czasów kiedy byłem moderatorem na forach większych niż to za takie odpowiedzi typu nie to nie dobre zanim pójdziesz z motyką na słońce poczytaj poradniki itp to dostawało się ostrzeżenia. Skoro ktoś nie ma myślenia programistycznego to nawet skoro przeczyta milion książek nic nie daje :) I takową jestem osobą. Pozdrawiam i liczę na zamknięcie tej dyskusji

1

Przejrzyj sobie jak takowy przykładzik jest zbudowany i porównaj ze swoim kodem. Od razu zauważysz, co masz źle.
ps. 1 raz w życiu użyłem dziedziczenia i nawet nie wywaliło błędu. Jestem z siebie dumny xD

#include <iostream>
#include <string>
using namespace std;

class cItem{
    public:
        cItem();
        ~cItem();
        void SetName(string newName);
        string GetName();
        void PrintName();
    protected:
        string sName;
};

cItem::cItem(){
    sName = "undefined";
}
cItem::~cItem(){
    sName.clear();
}
void cItem::SetName(string newName){
    sName = newName;
}
string cItem::GetName(){
    return sName;
}
void cItem::PrintName(){
    cout << sName << endl;
}

class cTablet : public cItem{
    public:
        cTablet(string newName);
};

cTablet::cTablet(string newName){
    SetName(newName);
}

int main()
{
    class cTablet myTablet("my tablet");
    myTablet.PrintName();
}
 
0

Ok to inaczej na podstawie przykładu z internetu napisałem sobie o taki przykład:

 #include<iostream>
#include<string>
using namespace std;
 
 
class   TSamochod{
 
   string marka;
   double pB, pM, zP ; //pojemność baku, prędkość maksymalna, zużycie paliwa
  public:
   TSamochod(string , double , double , double );
   void jedz(float jakSzybko, float jakDaleko);
 
 
};
 
class   TKabriolet: public TSamochod{
   bool dach_otwarty;
  public:
      TKabriolet(string , double , double , double , bool dach_otwarty=false);
    bool otworz_dach(bool dach_otwarty);
    bool zamknij_dach(bool dach_otwarty );
    void jedz(float jakSzybko, float jakDaleko);
};
 
class TSuv: public TSamochod{
	public:
		TSuv(string, double, double, double);
		 void jedz(float jakSzybko, float jakDaleko);
};
class TCiez: public TSamochod{
	bool ladunek_jest;
	public:
		TCiez(string, double, double, double,bool ladunek_jest=false );
		bool ladunek_jest(bool ladunek_jest);
		bool ladunek_jest(bool brak_ladunek);
		 void jedz(float jakSzybko, float jakDaleko);
		 void ileczasu (float );
};
int main(int argc, char* argv[])
{
        TSamochod audi("audi", 30, 185, 10.5);
        TKabriolet alfa("alfa", 25, 140, 7.0);
        TSuv jeep("jeep", 90,180,15.0);
        TCiez man("man",500,95,25.0);
		audi.jedz(160,1800);
        alfa.jedz(110,1200);
        jeep.jedz(190,900);
        man.jedz(95,5000);
        return 0;
}
TSamochod::TSamochod(string m, double pB , double pM , double zP )
{
   marka=m;
   this->pB=pB;
   this->pM=pM;
   this->zP=zP;
}
 
 
 void TSamochod::jedz(float jakSzybko, float jakDaleko)
{
   if(jakSzybko>=pM)
     jakSzybko=pM;
     cout<<"Samochod pojedzie z szybkoscia: "<<jakSzybko<<endl;
 
     double zuzycie=(jakDaleko*0.01)*zP;
     if(jakSzybko<(0.3*pM) || jakSzybko>(0.8*pM)) zuzycie+=zuzycie*0.2;
     cout<<"Zuzycie paliwa: "<<zuzycie<<endl;
 
   if(zuzycie<pB)
     cout<<"Nie nalezy tankowac. "<<endl;
   int ile=0;
   if(zuzycie>pB)
   {
     while(zuzycie>0)
     {
       zuzycie-=pB;
       ile++;
     }
 
     cout<<"Nalezy tankowac "<<ile<<" razy."<<endl;
   }
    cout<<"Podroz zajmie: "<<((ile*0.10)+(jakDaleko/jakSzybko))<<" godzin"<<endl;
 
 
}
 
TKabriolet::TKabriolet(string m, double pB, double pM, double zP, bool dach_otwarty): TSamochod(m,pB,pM,zP), dach_otwarty(dach_otwarty)
{}
 
void TKabriolet::jedz(float jakSzybko, float jakDaleko)
{
         cout<<" \nDach Kabrioletu ";
         dach_otwarty==true ? cout<<"otwarty"<<endl : cout<<"zamkniety"<<endl;
     TSamochod::jedz(jakSzybko, jakDaleko);
}
 
bool TKabriolet::otworz_dach(bool dach_otwarty)
{
    dach_otwarty=true;
    return dach_otwarty;
}
 
bool zamknij_dach(bool dach_otwarty )
{
    dach_otwarty=false;
    return dach_otwarty;
}
void TCiez::jedz(float jakSzybko,jakDaleko)
	cout<<" \n Czy Załadowany?";
	ladunek_jest==true? cout<<"Ladunek"<<endl : cout<<"Brak"<<endl;
	Tsamochod::jedz(jakSzybko, jakDaleko);
	
bool TCiez::Ladunek(bool ladunek_jest)
	ladunek_jest=true;
	return ladunek_jest;
	
bool TCiez::Brak_Ladunek(bool ladunek_jest)
	ladunek_jest=false;
	return ladunek_jest; 

Ma on kilka zmiennych i teraz tak. Przed dodaniem zmiennej bool TCiez::Brak_Ladunek i zmiennnej bool TCiez::Ladunek wywalało bład
$(BIN): $(OBJ) $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)
W devie. Wiem nie programuje sie w devie bo nie jest on już wspierany ale czy ktoś może powiedziec zy to tylko wina deva czy też samego kodu? NO i po dodaniu tych zmiennych i wpisaniu ich do kodu wynika ze program ma problemy z samą deklaracją tej zmiennej typu bool choć wdaje mi się że wzorowalem się na kodzie z dachu otwartego. Czy źle mniemam? Chyba ze znów mam złe założenia w programie program wg mnie powinien działać tak:
Do tego co mam podane wylicza aktualnie ile km przejechać mozna i ile razy trzeba tankować kabriolet przy otwartym i zamkniętym dachu. Po dopisce gdyby zaczął on trybić chciałbym uzyskać jeszcze ile km i ile razy trzeba tankować cieżarówkę...
Wiem póki co nie ma destruktora ale jak się uporam z tymi błedami o postaram się dopisać destruktor.

1

|36|error: 'bool TCiez::ladunek_jest(bool)' cannot be overloaded|
|35|error: with 'bool TCiez::ladunek_jest(bool)'|
|110|error: 'jakDaleko' has not been declared|
|110|error: prototype for 'void TCiez::jedz(float, int)' does not match any in class 'TCiez'|
|37|error: candidate is: void TCiez::jedz(float, float)|
|115|error: no 'bool TCiez::Ladunek(bool)' member function declared in class 'TCiez'|
|119|error: no 'bool TCiez::Brak_Ladunek(bool)' member function declared in class 'TCiez'|
== Build failed: 7 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===

A więc:

class TCiez: public TSamochod{
    bool ladunek_jest;
    public:
        TCiez(string, double, double, double,bool ladunek_jest=false );
        bool ladunek_jest(bool ladunek_jest);
        bool ladunek_jest(bool brak_ladunek);
         void jedz(float jakSzybko, float jakDaleko);
         void ileczasu (float );
 

Postaw się na miejscu kompilatora:

  1. bool ladunek_jest;
  2. bool ladunek_jest(bool ladunek_jest);
  3. bool ladunek_jest(bool brak_ladunek);
int funkcja1;
int funkcja1();

niedozwolone

class obj{
    int funkcja1(int a);
    int funkcja1(int b);
}; 

niedozwolone - wychodzi w obydwu przypadkach funkcja1(int)

int funkcja1(int a);
    double funkcja1(int b); 

także niedozwolone

int funkcja1(int a, bool b);
    int funkcja1(int b); 

dozwolone - funkcje różnią się argumentami

class obj{
    int funkcja1(int a);
    int funkcja1(bool a);
}; 

Również dozwolone - funkcje różnią się argumentami


nastepnie:

class obj{
    int funkcja1(int a);
    int funkcja1(bool a);
};
int obj::funkcja1(int a)
    return -1; 

WTF

class obj{
    int funkcja1(int a);
    int funkcja1(bool a);
};
int obj::funkcja1(int a){
    return -1;
} 

JAAAA GUUUDDDD

1 użytkowników online, w tym zalogowanych: 0, gości: 1