• 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

VPS Starter Arubacloud
0 głosów
1,176 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 (194,920 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 (194,920 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 (194,920 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 (194,920 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 (194,920 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 (194,920 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 (194,920 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 242 wizyt
+1 głos
1 odpowiedź 299 wizyt
0 głosów
1 odpowiedź 94 wizyt
pytanie zadane 26 kwietnia 2017 w C# przez DODO Bywalec (2,950 p.)

92,417 zapytań

141,222 odpowiedzi

318,984 komentarzy

61,831 pasjonatów

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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...