Reklama
Pokazuje wyniki od 1 do 13 z 13

Temat: [C++] Klasa wizytowka

  1. #1

    Data rejestracji
    2009
    Posty
    313
    Siła reputacji
    16

    Domyślny [C++] Klasa wizytowka

    Cześć, potrzebuję klasę wizytówkę, która będzie przechowywać moje imie, nazwisko, nrindeksu. Klase te mam dołączać do każdego programu który oddaje. Napisałem coś takiego, ale wyskakuje kilka błędów i nie chce to działać....

    Kod :
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    class wizytowka
    {
    private:
    	char imie[10];
    	char nazwisko[10];
    	int nrindeks;
    public:
    	wizytowka(char *imie, char *nazwisko, int nrindeksu);
    	void pokaz();
    };
    
    wizytowka::wizytowka(char *imie, char *nazwisko, int nrindeksu)
    {
    	strcpy(this->imie, imie);
    	strcpy(this->nazwisko, nazwisko);
    	this->nrindeks=nrindeks;
    }
    
    void wizytowka::pokaz()
    {
    	cout << imie << " " << nazwisko << " " << nrindeks << endl;
    }
    w mainie jest po prostu
    Kod :
    wizytowka jan("Jan", "Kowalski", 999999);
    jan.pokaz();
    getch();
    Niestety program nie zwraca
    Jan Kowalski 999999
    tylko
    Jan Kowalski -872... jakies cyfry dalej, czyli nie wiem, adres czy wtf?

    EDIT#
    poza tym mam pytanie, wg profesora mojego metody/funkcje nie powinny/nie moga zwracac/byc typu VOID. Tak wiec da sie zrobic te funkcje pokaz jakos inaczej? tak by zwracala imie, nazwisko, nrindeksu ale nie przez cout?

    aha, co do calego programu, nie moge uzywac biblioteki STRING.

    EDIT2#
    jeszcze 1 pytanie, czy biblioteki <iostream>, <conio.h> i klasy "wizytowka,h" itd muszą być zamieszczone w KAŻDYM pliku źródłowym?
    Ostatnio zmieniony przez hefalump : 14-12-2013, 13:10

  2. #2
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    34
    Posty
    11,076
    Siła reputacji
    25

    Domyślny

    Wsadz mniejsza liczbę, używasz z tego co widziałem vs i nie wiem na jakiej maszynie to int może tego nie mieścić po prostu
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  3. #3

    Data rejestracji
    2009
    Posty
    313
    Siła reputacji
    16

    Domyślny

    mniejsza licze bo pola nrindeks tak? niestety ale nic to nie pomoglo ;/

  4. Reklama
  5. #4
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    34
    Posty
    11,076
    Siła reputacji
    25

    Domyślny

    ogólnie teraz jestem na kompie to powiem tak: klasa powinna zawierać tylko uniwersalne interfejsy
    getImie
    getNazwisko
    getNr
    zwracające odpowiednie typy
    set... ustawiające odpowiednie pola zwracająca void lub ewentualnie int z możliwością kodu błędu(ale tak się nie robi, od tego masz wyjątki)
    ewentualna metoda info pisząca na dowolny ostream(jak jako param dasz couta to wypisze na ekran, jak plik wyjściowy to do pliku itp)

    includy tam gdzie są potrzebne, pamiętając o strażnikach w nagłówkach
    msvs, którego używasz z tego co widziałem nie ma conia iirc, also jeśli nie musisz go używać weź cokolwiek na g++
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  6. #5
    Avatar Celestian hunter
    Data rejestracji
    2006
    Położenie
    Gliwice
    Wiek
    33
    Posty
    1,060
    Siła reputacji
    20

    Domyślny

    Masz literówkę:
    this->nrindeks=nrindeks;
    Przekazujesz w konstruktorze nrindeksu, a nie nrindeks.

    poza tym mam pytanie, wg profesora mojego metody/funkcje nie powinny/nie moga zwracac/byc typu VOID.
    Może chodzi mu o to, że powinieneś mieć metody zwracające prywatne pola? Coś typu:
    Kod :
    char * getImie ()
    {
    return imie;
    }
    jeszcze 1 pytanie, czy biblioteki <iostream>, <conio.h> i klasy "wizytowka,h" itd muszą być zamieszczone w KAŻDYM pliku źródłowym?
    Wszędzie gdzie ich używasz powinny być includowane, bezpośrednio lub pośrednio (np. ładujesz sobie do jednego pliku nagłówkowego wszystkie podstawowe biblioteki i potem includujesz tylko ten jeden plik). Z tym, że conio jest zdaje się biblioteką używaną w C - nie wiem czy to dobrze, że korzystasz z niej w programach z C++
    Ostatnio zmieniony przez Celestian hunter : 14-12-2013, 13:40

  7. #6
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    34
    Posty
    11,076
    Siła reputacji
    25

    Domyślny

    @UP: jeśli zawiera przydatne rzeczy to why not?
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  8. Reklama
  9. #7

    Data rejestracji
    2009
    Posty
    313
    Siła reputacji
    16

    Domyślny

    eh... glupia literowka i godzina czasu stracona, dzieki wielkie! Program wystwietla teraz imie, nazwisko i nr indeksu. Mam jednak jeszcze kilka pytań.

    Otóż potrzebuje stworzyć teraz klasę wektor, w której zawarte będzie między innymi:
    -konstruktor domyslny (tworzy wektor o wsp x=0, y=0)
    -konstruktor z argumentami(tworzy wektor o wspolrzednych podanych przez uzytownika)

    Poza tym klasa musi potrafic 2 czy 3 utworzone obiekty (wektory) przez siebie np. pomnozyc, dodac, pomnożyć przez liczbę.

    Niestety juz na samym poczatku mam kilka problemow...

    Kod :
    using namespace std;
    
    class wektor
    {
    private:
    	float x, y;
    public:
    	wektor(float x, float y);
    	void wyswietl();
    };
    
    wektor::wektor(float x, float y)
    {
    	this->x=x;
    	this->y=y;
    }
    
    void wektor::wyswietl()
    {
    	cout << x << " " << y << endl;
    }
    takie cos mam i to dziala (dziwne zeby nie dzialalo ;d), funkcja poki co void, do tego dojde jeszcze by to zmienic. Narazie chcialbym dodac tutaj konstruktor domyslny, jednak jak stworzyc w tej samej klasie 2 konstruktory? Przeciez ich nazwa musi byc taka jak nazwa klasy? Nie bardzo rozumiem jak moge to zrobic....

    Drugie pytanie moje dotyczy ciala tej klasy, profesor ostatnio wspomnial by dostep do danych byl private, w publicu powinny byc tylko deklaracje(?) metod/konstruktorow? Powyzszy kod zgadza sie z tym? Czy definicja(?) konstruktora i metody powinna byc w innym miejscu (gdyz jest ona jakby poza klasa?).
    Ostatnio zmieniony przez hefalump : 14-12-2013, 13:57

  10. #8
    Avatar joozioom
    Data rejestracji
    2007
    Posty
    1,462
    Siła reputacji
    18

    Domyślny

    Możesz skorzystać z przeciążania, ale tutaj chyba wystarczą argumenty domyślne co?

  11. #9
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    32
    Posty
    1,710
    Siła reputacji
    14

    Domyślny

    chyba właśnie zadanie polega na tym, żeby przeciążyć operatory.
    http://cpp0x.pl/artykuly/?id=15

  12. Reklama
  13. #10
    Avatar Zeimer
    Data rejestracji
    2008
    Położenie
    Kraina Konserwatywnych Liberałów
    Posty
    398
    Siła reputacji
    18

    Domyślny

    takie cos mam i to dziala (dziwne zeby nie dzialalo ;d), funkcja poki co void, do tego dojde jeszcze by to zmienic. Narazie chcialbym dodac tutaj konstruktor domyslny, jednak jak stworzyc w tej samej klasie 2 konstruktory? Przeciez ich nazwa musi byc taka jak nazwa klasy? Nie bardzo rozumiem jak moge to zrobic....
    Normalnie, robisz tyle konstruktorów ile potrzebujesz, pod warunkiem, że ich sygnatury się różnią.

    Drugie pytanie moje dotyczy ciala tej klasy, profesor ostatnio wspomnial by dostep do danych byl private, w publicu powinny byc tylko deklaracje(?) metod/konstruktorow? Powyzszy kod zgadza sie z tym?
    Tak.
    Czy definicja(?) konstruktora i metody powinna byc w innym miejscu (gdyz jest ona jakby poza klasa?).
    Tak. Deklarację klasy umieszczasz w NazwaKlasy.h, a definicje metod w NazwaKlasy.cpp.

    Wygląda na to, że raczej kiepsko sobie radzisz. Pytanie: dużo jest na studiach takich osób?

  14. #11
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    32
    Posty
    1,710
    Siła reputacji
    14

    Domyślny

    Cytuj Zeimer napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Tak. Deklarację klasy umieszczasz w NazwaKlasy.h, a definicje metod w NazwaKlasy.cpp.

    Wygląda na to, że raczej kiepsko sobie radzisz. Pytanie: dużo jest na studiach takich osób?
    tutaj już raczej chodzi o czystość kodu. Jakby wszystko wjebał do .cpp to też mu program będzie działał.

  15. #12

    Data rejestracji
    2009
    Posty
    313
    Siła reputacji
    16

    Domyślny

    Co do tego że sobie nie radzę - wiem, mam trochę plecy z programowaniem, ale staram się to nadrobić. No i nie jestem jedyną osobą w podobnej sytuacji u siebie na studiach ;d

    A co do programu, udało mi się co nie co zrobić, program ma teraz konstruktor domyslny oraz konstruktor z zadanymi argumentami. Poza tym ma metody - wyswietlania, liczenia sumy, mnozenia przez liczbe, liczenia iloczynu skalarnego. Kod wyglada tak

    Kod :
    class wektor
    {
    private:
    	float mx, my;
    public:
    	wektor()
    	{
    		mx=10;
    		my=10;
    	}
    	wektor(float x, float y) 
    	{ 
    		mx=x;
    		my=y;
    	}
    	float showx();
    	float showy();
    	float xliczba(float a);
    	float yliczba(float a);
    	float iloczynSkalarny(wektor wek1, wektor wek2);
    	float sumax(wektor wek1, wektor wek2);
    	float sumay(wektor wek1, wektor wek2);
    };
    
    
    float wektor::showx()
    {
    	return mx;
    }
    
    float wektor::showy()
    {
    	return my;
    }
    
    float wektor::xliczba(float a)
    {
    	return a*mx;
    }
    
    float wektor::yliczba(float a)
    {
    	return a*my;
    }
    
    float wektor::iloczynSkalarny(wektor wek1, wektor wek2)
    {
    	    return  (wek1.mx * wek2.mx + wek1.my * wek2.my);
    }
    
    float wektor::sumax(wektor wek1, wektor wek2)
    {
    	return (wek1.mx+wek2.mx);
    }
    
    float wektor::sumay(wektor wek1, wektor wek2)
    {
    	return (wek1.my+wek2.my);
    }
    chyba ok? w kazdym razie to dziala. Jednak mam kilka pytan
    1. Czy np. funkcja wyswietlania czy liczenia sumy musi byc tak rozdzielona? Przykladowo
    mam tutaj liczenie sumy X
    Kod :
    return (wek1.mx+wek2.mx);
    a w drugiej funkcji sumy Y
    Kod :
    return (wek1.my+wek2.my);
    a w mainie
    Kod :
    cout << "Suma wektorow = [" << arg.sumax(arg, def) << ", " << arg.sumay(arg, def) << "]";
    Da sie to zrobic za pomoca 1 funkcji? Jak tak to w jaki sposob?

    No i pytanie 2, powiazane z powyzsza linia z main'a.
    Wywolujac te funkcje pisze - arg.sumax(arg, def) - czyli - nazwa_obiektu.nazwa_funkcji(argument1, argument2) - gdzie argumentami sa obiekty arg i def.
    Sęk w tym, że nie ma różnicy czy zapis wyglada tak, czy np. def.sumax(arg, def). To samo tyczy sie iloczynu skalarnego, kompilator domagal sie by przed kropką była nazwa obiektu, jednak nie ma różnicy który obiekt wezme, wynik jest we wszystkich przypadkach taki sam. Program działa poprawnie, ale może jest jakieś "ładniejsze" rozwiązanie tego? Nie bardzo rozumiem jaka jest rola tego obiektu ktory wpisze przed kropką..

    edit#
    aha no i jeszcze 1 pytanie... profesor mowil cos jeszcze o konstruktorze ktorego elementem jest tablica 1wymiarowa
    doubleA[20];
    wektor x(20, A);
    niestety za cholere nie wiem o co z tym chodzi (ludzie z grupy maja ten sam problem... profesor ma to do siebie ze rzuci cos takiego i koniec tematu, a pozniej nie wiadomo o co chodzi ;d). Moze ktos mądrzejszy ode mnie pomoglby to rozszyfrowac?
    Ostatnio zmieniony przez hefalump : 16-12-2013, 13:33

  16. Reklama
  17. #13
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    32
    Posty
    1,909
    Siła reputacji
    19

    Domyślny

    Aby zrobic w 1 funkcji to sumowanie, potrzebujesz funkcje ktora zwraca nie float, a wartosc typu wektor.

    Czyli:

    Kod :
    wektor suma(wektor wek1, wektor wek2);
    W niej tworzysz nowa zmienna typu wektor, przypisujesz jej polom odpowiednie wartosci (sumyx i sumyy) i jako return podajesz ta nowa zmienna.

    Dalej powinienes sobie poradzic, musisz oczywiscie pamietac, ze teraz zwracasz obiekt (wartosci obiektu) a nie pojedyncza wartosc, i traktowac wynik jak zmienna. Wiec mozesz zrobic:

    Kod :
    wektor nowy_wektor = suma(wek1, wek2);
    I wyswwietlac nowy_wektor.my i nowy_wektor.mx

    albo nie tworzyc nowej zmiennej i w wyswietlaniu zrobic
    Kod :
    suma(wek1, wek2).my //nie jestem pewny czy na pewno tak sie da, ale powinno
    Ostatnio zmieniony przez Bazan : 16-12-2013, 13:47
    Dreaming by drumming. ˆˆ™

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. "Klass - Elu parast" Nasza Klasa - Życie po
    Przez Mati w dziale Filmy, seriale i telewizja
    Odpowiedzi: 0
    Ostatni post: 14-01-2013, 21:13
  2. Fizyka i astronomia liceum 1 klasa poziom rozrzeszony
    Przez VikeM w dziale Szkoła i nauka
    Odpowiedzi: 5
    Ostatni post: 09-11-2012, 17:44
  3. Odpowiedzi: 3
    Ostatni post: 13-01-2012, 02:38
  4. klasa maturalna - niezdanie
    Przez Szczypior w dziale Szkoła i nauka
    Odpowiedzi: 5
    Ostatni post: 29-11-2011, 20:31

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •