• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Metoda zwracająca enum w formie tekstowej

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,994 wizyt
pytanie zadane 22 kwietnia 2018 w C i C++ przez sztympel Nowicjusz (170 p.)

Witam, mam problem z "enum". Mianowicie muszę napisać klasę, która reprezentuje numer telefonu i spełnić kilka wymagań: 
- nr telefonu ma być opisywany przez enumerację typu numeru (komórkowy, domowy, służbowy), numer kierunkowy kraju (dwie cyfry) oraz numer właściwy (od jednej do dziesięciu cyfr),
-klasa ma być wyposażona w konstruktor parametryczny umożliwiający ustawienie wszystkich parametrów numeru,
-klasa ma posiadać metodę zwracającą typ numeru telefonu w formie tekstowej,
-klasa ma posiadać metodę zwracającą liczbowo numer kierunkowy kraju,
-klasa ma posiadać metodę zwracającą liczbowo numer telefonu.

Problem polega na wymaganiu zaznaczonym czerwonym kolorem. Poniżej wstawiam swój kod, wydaje mi się, że wszystko jest okej oprócz zwrócenia enuma, czy ma ktoś jakiś pomysł ? smiley
Dodam, że dopiero poznaję obiektówkę. 

#include <iostream>
#include <stdio.h>
#include <conio.h>

enum typ_numeru
    {
        domowy = 1,
        komorkowy = 2,
        sluzbowy = 3
    };
class NumerTelefonu
{
private:
    enum typ_numeru jaki;
    int nr_kierunkowy,nr_numer;
public:
    NumerTelefonu();
    NumerTelefonu(enum typ_numeru jaki);
    NumerTelefonu(enum typ_numeru jaki, int nr_kierunkowy);
    NumerTelefonu( int nr_kierunkowy, int nr_numer );
    NumerTelefonu(enum typ_numeru jaki , int nr_kierunkowy, int nr_numer );
    typ_numeru ZwrocTyp() const;
    int ZwrocKierunkowy() const;
    int ZwrocNumer() const;
    void Wyswietl() const;
};
NumerTelefonu::NumerTelefonu()
{
jaki = komorkowy;
nr_kierunkowy=32;
nr_numer=123456789;
}
NumerTelefonu::NumerTelefonu(enum typ_numeru jaki )
    {
        this->jaki = jaki;
        printf("konstruktor\n");
    };
NumerTelefonu::NumerTelefonu(enum typ_numeru jaki  , int nr_kierunkowy  )
    {
        this->jaki = jaki;
        this->nr_kierunkowy = nr_kierunkowy;
        printf("konstruktor\n");
    };
    NumerTelefonu::NumerTelefonu( int nr_kierunkowy , int nr_numer )
    {

        this->nr_kierunkowy = nr_kierunkowy;
        this->nr_numer = nr_numer;
        printf("konstruktor\n");
    };
NumerTelefonu::NumerTelefonu(enum typ_numeru jaki  , int nr_kierunkowy , int nr_numer )
    {
        this->jaki = jaki;
        this->nr_kierunkowy = nr_kierunkowy;
        this->nr_numer = nr_numer;
        printf("konstruktor\n");
    };
 typ_numeru NumerTelefonu::ZwrocTyp() const
    {
            return jaki;
    };
int NumerTelefonu::ZwrocKierunkowy() const
{
    return nr_kierunkowy;
}
int NumerTelefonu::ZwrocNumer() const
{
    return nr_numer;
}
void NumerTelefonu::Wyswietl() const
{
    std::cout<<jaki<<"\n"<<nr_kierunkowy<<"\n"<<nr_numer;
}

int main()
{

NumerTelefonu pierwszy(sluzbowy,82,987654321);
pierwszy.Wyswietl();

    _getch();
    return 0;
}

 

komentarz 22 kwietnia 2018 przez j23 Mędrzec (195,260 p.)
    NumerTelefonu();
    NumerTelefonu(enum typ_numeru jaki);
    NumerTelefonu(enum typ_numeru jaki, int nr_kierunkowy);

Te konstruktory są bez sensu.

komentarz 22 kwietnia 2018 przez sztympel Nowicjusz (170 p.)
Przy podaniu np dwóch parametrów, a nie trzech był błąd więc pomyślałem, żeby tak to ominąć, czyli to nie jest poprawne ?
komentarz 22 kwietnia 2018 przez j23 Mędrzec (195,260 p.)

To nie kwestia poprawności, tylko sensowności. Istotą klasy NumerTelefonu jest przechowywanie numeru telefonu. Więc jaki ma sens tworzenie obiektu tej klasy, który nie przechowuje żadnego numeru lub tylko kierunkowy? Gdyby twoja klasa miała mutatory, to co innego, ale ma tylko akcesory, zatem sensu tych konstruktorów nie widzę (no może jeszcze domyślny bym zostawił)

komentarz 22 kwietnia 2018 przez sztympel Nowicjusz (170 p.)

Słuszna uwaga, dziękuję smiley

1 odpowiedź

+1 głos
odpowiedź 22 kwietnia 2018 przez j23 Mędrzec (195,260 p.)
wybrane 22 kwietnia 2018 przez sztympel
 
Najlepsza
const char* ZwrocTyp() const
{
	switch(jaki)
	{
	case domowy: return "domowy"; 
	case komorkowy: return "komorkowy"; 
	case sluzbowy: return "sluzbowy"; 	
	};
}

 

komentarz 22 kwietnia 2018 przez sztympel Nowicjusz (170 p.)

Nadal wyświetla numer z enum, coś trzeba zmienić w metodzie Wyswietl() ?

komentarz 22 kwietnia 2018 przez j23 Mędrzec (195,260 p.)

Usuń swoją implementację ZwrocTyp i zostaw moją.

 

Skup się bardziej...

komentarz 22 kwietnia 2018 przez sztympel Nowicjusz (170 p.)

Tak zrobiłem...

#include <iostream>
#include <stdio.h>
#include <conio.h>

enum typ_numeru
    {
        domowy = 1,
        komorkowy = 2,
        sluzbowy = 3
    };
class NumerTelefonu
{
private:
    enum typ_numeru jaki;
    int nr_kierunkowy,nr_numer;
public:
    NumerTelefonu();
    NumerTelefonu(enum typ_numeru jaki);
    NumerTelefonu(enum typ_numeru jaki, int nr_kierunkowy);
    NumerTelefonu( int nr_kierunkowy, int nr_numer );
    NumerTelefonu(enum typ_numeru jaki , int nr_kierunkowy, int nr_numer );
    const char* ZwrocTyp() const
    {
        switch(jaki)
        {
            case domowy: return "domowy";
            case komorkowy: return "komorkowy";
            case sluzbowy: return "sluzbowy";
        };
    }
    int ZwrocKierunkowy() const;
    int ZwrocNumer() const;
    void Wyswietl() const;
};
NumerTelefonu::NumerTelefonu()
{
jaki = komorkowy;
nr_kierunkowy=32;
nr_numer=123456789;
}
NumerTelefonu::NumerTelefonu(enum typ_numeru jaki )
    {
        this->jaki = jaki;
        printf("konstruktor\n");
    };
NumerTelefonu::NumerTelefonu(enum typ_numeru jaki  , int nr_kierunkowy  )
    {
        this->jaki = jaki;
        this->nr_kierunkowy = nr_kierunkowy;
        printf("konstruktor\n");
    };
    NumerTelefonu::NumerTelefonu( int nr_kierunkowy , int nr_numer )
    {

        this->nr_kierunkowy = nr_kierunkowy;
        this->nr_numer = nr_numer;
        printf("konstruktor\n");
    };
NumerTelefonu::NumerTelefonu(enum typ_numeru jaki  , int nr_kierunkowy , int nr_numer )
    {
        this->jaki = jaki;
        this->nr_kierunkowy = nr_kierunkowy;
        this->nr_numer = nr_numer;
        printf("konstruktor\n");
    };

int NumerTelefonu::ZwrocKierunkowy() const
{
    return nr_kierunkowy;
}
int NumerTelefonu::ZwrocNumer() const
{
    return nr_numer;
}
void NumerTelefonu::Wyswietl() const
{

    std::cout<<jaki<<"\n"<<nr_kierunkowy<<"\n"<<nr_numer;
}

int main()
{

NumerTelefonu pierwszy(domowy,82,987654321);
pierwszy.Wyswietl();

    _getch();
    return 0;
}

 

1
komentarz 22 kwietnia 2018 przez j23 Mędrzec (195,260 p.)

Ręce opadają... Przyjrzyj się implementacji Wyswietl.

komentarz 22 kwietnia 2018 przez sztympel Nowicjusz (170 p.)
Tak jak wspomniałem, dopiero się uczę...
Przyglądam się... na pewno jest tu coś nie tak, stąd pytanie wyżej o metodę Wyświetl().
Mógłbyś mnie oświecić ?
komentarz 22 kwietnia 2018 przez j23 Mędrzec (195,260 p.)

W treści zadania nie ma nic na temat metody Wyswietl. Wywal ja i wyświetl (w mainie) zawartość obiektu z wykorzystaniem metod ZwrocTyp, ZwrocKierunkowy i ZwrocNumer - po to w końcu one są.

komentarz 22 kwietnia 2018 przez sztympel Nowicjusz (170 p.)

Słuszna uwaga, o tym nie pomyślałem. Tak jak z ZwrocKierunkowy() i ZwrocNumer() nie ma problemu, tak w ZwrocTyp() nadal jest, robię coś nie tak... Nadal wypisuje cyfrę, mógłbyś napisać jak powinno to poprawnie wyglądać ?

#include <iostream>
#include <stdio.h>
#include <conio.h>

enum typ_numeru
    {
        domowy = 1,
        komorkowy = 2,
        sluzbowy = 3
    };
class NumerTelefonu
{
private:
    enum typ_numeru jaki;
    int nr_kierunkowy,nr_numer;
public:
    NumerTelefonu();
    NumerTelefonu(enum typ_numeru jaki , int nr_kierunkowy, int nr_numer );
    const char* ZwrocTyp() const
    {

        switch(jaki)
        {
            case domowy: 
                std::cout<<domowy<<std::endl; 
                return "domowy";
            case komorkowy: 
                std::cout<<komorkowy<<std::endl; 
                return "komorkowy";
            case sluzbowy: 
                std::cout<<sluzbowy<<std::endl; 
                return "sluzbowy";
        };

    }
    int ZwrocKierunkowy() const;
    int ZwrocNumer() const;

};
NumerTelefonu::NumerTelefonu()
{
jaki = komorkowy;
nr_kierunkowy=32;
nr_numer=123456789;
}
NumerTelefonu::NumerTelefonu(enum typ_numeru jaki  , int nr_kierunkowy , int nr_numer )
    {
        this->jaki = jaki;
        this->nr_kierunkowy = nr_kierunkowy;
        this->nr_numer = nr_numer;

    };
int NumerTelefonu::ZwrocKierunkowy() const
{
    std::cout<<nr_kierunkowy<<std::endl;
    return nr_kierunkowy;
}
int NumerTelefonu::ZwrocNumer() const
{
    std::cout<<nr_numer<<std::endl;
    return nr_numer;
}

int main()
{

NumerTelefonu pierwszy(komorkowy,82,987654321);
pierwszy.ZwrocTyp();
pierwszy.ZwrocKierunkowy();
pierwszy.ZwrocNumer();


    _getch();
    return 0;
}

 W switch'u w cout zamiast domowy, komorkowy, sluzbowy wpisywałem też jaki lecz to też nic nie dało, nie wiem jak to ugryźć..

komentarz 22 kwietnia 2018 przez j23 Mędrzec (195,260 p.)

Co żeś się tak uparł na to, że klasa ma cokolwiek wyświetlać? Wywal te couty z metod i zrób tak:

std::cout << "Typ: " << pierwszy.ZwrocTyp() << '\n';
std::cout << "Kierunkowy:  " << pierwszy.ZwrocKierunkowy()  << '\n';
std::cout << "Numer: " << pierwszy.ZwrocNumer() << '\n';

 

komentarz 22 kwietnia 2018 przez sztympel Nowicjusz (170 p.)

Aaaaa surprise Tak to ugryźć... Teraz rozumiem. Uparłem się bo nie wiedziałem jak to inaczej zrobić cheeky.
Dzięki wielkie za cierpliwość, pomoc i czas ! 

Podobne pytania

0 głosów
3 odpowiedzi 402 wizyt
+1 głos
1 odpowiedź 511 wizyt
0 głosów
1 odpowiedź 127 wizyt
pytanie zadane 26 kwietnia 2017 w C# przez DODO Bywalec (2,950 p.)

93,187 zapytań

142,203 odpowiedzi

322,023 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2581p. - dia-Chann
  2. 2537p. - Łukasz Piwowar
  3. 2528p. - Łukasz Eckert
  4. 2514p. - CC PL
  5. 2445p. - Łukasz Siedlecki
  6. 2443p. - rucin93
  7. 2252p. - Tomasz Bielak
  8. 2201p. - Michal Drewniak
  9. 2156p. - Marcin Putra
  10. 2152p. - Adrian Wieprzkowicz
  11. 2105p. - Mikbac
  12. 1941p. - Anonim 3619784
  13. 1733p. - rafalszastok
  14. 1480p. - Michał Telesz
  15. 1469p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...