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

Optymalizowanie kodu wykorzystujące dziedziczenie (++)

Object Storage Arubacloud
0 głosów
198 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 Ekspert (344,860 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 Ekspert (344,860 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 Ekspert (344,860 p.)
Osoba nie jest też kontem bankowym. Co najwyżej ma konto bankowe.

Podobne pytania

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

92,537 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...