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

Optymalizowanie kodu wykorzystujące dziedziczenie (++)

0 głosów
281 wizyt
pytanie zadane 21 listopada 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

Witam!

Program który napisałem nie jest niczym wielkim ogólnie rzecz biorąc było to ćwiczenie dziedziczenia (jednak nie ma go tutaj za wiele).

#include <iostream>
#include <windows.h>
#include <string>

class Bank
{
private:
	std::string name;
	int age;
	int PIN;
	double value = 22422.44;
public:
	Bank(const std::string, int);
	void check_pin();
};

class Person : public Bank
{
public:
	Person(std::string, int);
};

Bank::Bank(const std::string nm, int ag) : name(nm), age(ag)
{
	std::cout << "Podaj imie i nazwisko: "; std::getline(std::cin, name);
	std::cout << "Podaj swoj wiek: " << ag << std::endl;
}

void Bank::check_pin()
{
	std::cout << "Podaj kod PIN: ";
	std::cin >> PIN;
	if (PIN == 7913)
	{
		std::cout << "Kod prawidlowy!\n";
		std::cout << "Saldo: " << value << std::endl;
	}
	else
		std::cout << "Kod nieprawidlowy!\n";
	std::cout << "Dziekujemy za przybycie!\n";
}

Person::Person(std::string nm, int ag) : Bank(nm, ag) { }

int main()
{
	std::string nm;
	Person klient(nm, 23);
	klient.check_pin();
	Sleep(5000);
	return 0;
}

Mam pytania:

1. W jaki sposób mogę stworzyć warunek pętli opierając się na wytycznych (program zakończy się, wyświetlając prawidłowe dane)

  • PIN == 7913, PIN > 999, PIN < 9999,
  • Jeżeli PIN jest różny od 7913, może się wykonać 3 razy (właśnie w tym miejscu mam problem, ponieważ wielokrotnie chciałem połączyć w waruneku pętli powyższe dane i wyświetlenie 3 krotne pętli.

Chodzi dokładnie o tą część kodu:

std::cout << "Podaj kod PIN: "; std::cin >> PIN; if (PIN == 7913) { std::cout << "Kod prawidlowy!\n"; std::cout << "Saldo: " << value << std::endl; } else std::cout << "Kod nieprawidlowy!\n";

 

2. Korzystając z dziedziczenia oraz różnych metod w jaki sposób mogę zoptymalizować ten kod ?

1 odpowiedź

+2 głosów
odpowiedź 21 listopada 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Po pierwsze uzywaj plikow naglowkowych. Po drugie pamietaj ze dziedziczenie jest odwzorowaniem rzeczywistosci i wyjasnij jaki sens ma ze czlowiek dziedziczy z banku? Pamietaj ze nie wszystko da sie napisac uzywajac dziedziczenia. Tutaj chcesz tylko zrobic symulacje banku a to kwestia kilku linijek w mainie. Chyba ze chcesz uzyc obiektowki to podziel to sobie na dwie odrebne klasy Bank, klient i stworz wspolprace miedzy obiektami tych klas. Dziedziczenie jak najbardziej nie ma tu sensu
komentarz 21 listopada 2018 przez adrian17 Mentor (354,120 p.)

wyjasnij jaki sens ma ze czlowiek dziedziczy z banku

Podobnie, dlaczego PIN i wiek są cechami banku?

komentarz 21 listopada 2018 przez Sic Dyskutant (8,510 p.)
edycja 21 listopada 2018 przez Sic

Bank posiada klientów, to drugie to po prostu start z dziedziczeniem jeszcze nie wiem do końca jak to działa.

Tak lepiej ?:

#include <iostream>
#include <windows.h>
#include <string>

class Bank
{
private:
	int PIN;
	double value = 22422.44;
public:
	Bank() {};
	void check_pin();
};

class Person : public Bank
{
private:
	std::string name;
	int age;
public:
	Person(std::string, int);
};

void Bank::check_pin() // dodać opcje 3 krotnej próby
{
	std::cout << "Podaj kod PIN: ";
	std::cin >> PIN;
	if (PIN == 7913)
	{
		std::cout << "Kod prawidlowy!\n";
		std::cout << "Saldo: " << value << std::endl;
	}
	else if (PIN < 999 || PIN > 9999)
		std::cout << "Podanych liczb jest za duzo lub za malo!\n";
	else
		std::cout << "Kod nieprawidlowy!\n";
	std::cout << "Dziekujemy za przybycie!\n";
}

Person::Person(std::string nm, int ag) : name(nm), age(ag)  {
	std::cout << "Podaj imie i nazwisko: "; std::getline(std::cin, name);
	std::cout << "Podaj swoj wiek: " << ag << std::endl;
}

int main()
{
	std::string nm;
	Person klient(nm, 23);
	klient.check_pin();
	Sleep(5000);
	return 0;
}

Jaki warunek pętli muszę teraz dodać, aby program sprawdzał PIN (check_pin()) 3 krotnie (w przypadku błędu) lub jeżeli kod jest odpowiedni program się zamyka ?

komentarz 22 listopada 2018 przez Poczprogramista123 Bywalec (2,900 p.)

Dalej masz dziedziczenie ale jak chcesz.  w czym problem tworzysz petle xd

for(int i=0;i<3;i++)
///wczytuj 
/// if poprawny pin opusc petle
///else komunikat podaj pin jescze raz

 

komentarz 22 listopada 2018 przez adrian17 Mentor (354,120 p.)
Osoba wciąż nie powinna być bankiem.
komentarz 22 listopada 2018 przez Sic Dyskutant (8,510 p.)

Jednak break, zadziałało dziękuję Ci.

Tak lepiej ?

#include <iostream>
#include <windows.h>
#include <string>

class Bank_account
{
private:
	int PIN;
	double value = 22422.44;
public:
	Bank_account() {};
	void check_pin();
};

class Person : public Bank_account
{
private:
	std::string name;
	int age;
public:
	Person(std::string, int);
};

void Bank_account::check_pin() // dodać opcje 3 krotnej próby
{
	std::cout << "Podaj kod PIN: ";
	std::cin >> PIN;
	int i = 0;
	for(int i=0; i<3;i++) {
		if (PIN == 7913)
		{
			std::cout << "Kod prawidlowy!\n";
			std::cout << "Saldo: " << value << std::endl;
			break;
		}
		else if (PIN < 999 || PIN > 9999)
			std::cout << "Podanych liczb jest za duzo lub za malo!\n";
		else
			std::cout << "Kod nieprawidlowy!\n";
		i++;
		std::cout << "Podaj kod PIN: ";
		std::cin >> PIN;
	}
	std::cout << "Dziekujemy za przybycie!\n";
}

Person::Person(std::string nm, int ag) : name(nm), age(ag)  {
	std::cout << "Podaj imie i nazwisko: "; std::getline(std::cin, name);
	std::cout << "Podaj swoj wiek: " << ag << std::endl;
}

int main()
{
	std::string nm;
	Person klient(nm, 23);
	klient.check_pin();
	Sleep(5000);
	return 0;
}

 

komentarz 22 listopada 2018 przez adrian17 Mentor (354,120 p.)
Osoba nie jest też kontem bankowym. Co najwyżej ma konto bankowe.

Podobne pytania

0 głosów
1 odpowiedź 555 wizyt
pytanie zadane 22 grudnia 2019 w C i C++ przez Jacuchna0 Użytkownik (640 p.)
0 głosów
1 odpowiedź 266 wizyt
pytanie zadane 11 grudnia 2019 w C i C++ przez Jacuchna0 Użytkownik (640 p.)
0 głosów
0 odpowiedzi 484 wizyt
pytanie zadane 22 września 2019 w C i C++ przez niezalogowany

93,426 zapytań

142,421 odpowiedzi

322,647 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...