c++ klasy,konstruktory,przeciążone operatory - problem z zadaniem

0

Treść zadania:

Napisz program zawierający klasę Komputer posiadającą pola prywatne:
procesor, kartaGraficzna, częstotliwość,pojemność dysku,ilośćPamięci.
Klasa powinna posiadać dwa konstruktory:
– ustawiający nazwę procesora i karty graficznej
– ustawiający nazwę procesora, nazwę karty graficznej oraz pojemność dysku
Zaimplementuj metody pozwalające na ustawienie i wyświetlanie wszystkich pól klacy Komputer.Zaproponuj funkcje przeciążające operatory porównania(<,>)w celu porównania pojemności dysku komputerów.

Poniżej zamieszczam to co udało mi się napisać, ale mój problem jest taki czy ten przeciążony operator jest dobrze zrobiony, jeśli nie to co mam zmienić, i druga sprawa jak się dostać później już normalnie w main() do tej funkcji wpisz() która jest zdefiniowana w klasie. Bo chce żeby mi się na ekranie wyświetlały te wszystkie zapytania o podanie tych danych dla komputera.

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

using namespace std;
class komputer{
      char cpu[40];
      char grafika[40];
      int czestotliwosc;
      int hdd;
      int ram;
public:
         
         
        void wpisz()
        {
        char nazwa1,nazwa2;
        int f,dysk,Ram;
        
         cout<<"nazwa procesora :"<<endl;                                       
         cin>>nazwa1;
         cout<<"nazwa karty graficznej: "<<endl;
         cin>>nazwa2;
         cout<<"czestotliwosc procesora: "<<endl;
         cin>>f;
         cout<<"pojemnosc dysku twardego: "<<"GB"<<endl;
         cin>>dysk;
         cout<<"RAM :"<<endl;
         cin>>Ram;
         };
       void wypisz(){
         cout<<"nazwa procesora :"<<cpu<<endl;
         cout<<"nazwa karty graficznej: "<<grafika<<endl;
         cout<<"czestotliwosc procesora: "<<czestotliwosc<<endl;
         cout<<"pojemnosc dysku twardego: "<<hdd<<"GB"<<endl;
         cout<<"RAM :"<<ram<<endl;
         };
      komputer( char * nazwa1, char * nazwa2){
      strcpy(cpu,nazwa1);
      strcpy(grafika,nazwa2);
      };
      komputer(char * nazwa1,char *nazwa2,int dysk){
      strcpy(cpu,nazwa1);
      strcpy(grafika,nazwa2);
      hdd=dysk;
      
      };
      
     komputer komp3( char*nazwa1,char*nazwa2, int f,int  dysk ,int  Ram){
     strcpy(cpu,nazwa1);
     strcpy(grafika,nazwa2);
     czestotliwosc=f;
     hdd=dysk;
     ram=Ram;
     };
     ////////////////////////////////
     bool operator < ( komputer komp) ;
           
     };
     
     bool komputer::operator < (komputer komp)
     {
          if(this->hdd<komp.hdd)
          return true;
          else
          return false;
     }
     /////////////////////////////////////
int main()
     {
         
    komputer komp1("Celeron","Radeon");
    komputer komp2("Pentium4","NVidia",140);
    komputer komp4("Pentium3","Radeon",50);
    //komputer komp3(char*nazwa1,char*nazwa2,int f,int dysk ,int Ram);
    komp2.wypisz();
    komp4.wypisz();
    
    cout<<endl;
   cout<<endl;
   
   if(komp4<komp2) { cout << " Drugi komputer ma wiekszy dysk" << endl; }
   else { cout << " Pierwszy komputer ma wiekszy dysk" << endl; };
   
   
   cout<<endl;
   cout<<endl;
   
 system ("pause");
return 0;
}
0

Dlaczego nie używasz std::string? Kod byłby czytelniejszy i bardziej uniwersalny (a co, jak ktoś wpisze 50 znakową nazwę karty graficznej?). Co to ma być komp3?

Operator jest ok. Nie wiem tylko po co używasz this->hdd zamiast po prostu hdd. Możesz też dodać przekazywanie jego argumentu przez stałą referencję. Ja zrobiłbym ten operator poza klasą, ale to nie ma aż tak dużego znaczenia.

Jak to nie wiesz jak dostać się do funkcji wpisz? Do wypisz się dostałeś, zrób to tak samo...

0

Zamiast

bool komputer::operator < (komputer komp)
     {
          if(this->hdd<komp.hdd)
          return true;
          else
          return false;
     }

wystarczy

bool komputer::operator < (komputer komp)
     {
          return (this->hdd<komp.hdd) ? true : false ;
     }
0

Wystarczy return (hdd < komp.hdd). Tylko po co. Żadna to optymalizacja, bo kompilator i tak zrobi to w ten sposób, a czytelność kodu dla początkującego jest mniejsza.

0
       char nazwa1,nazwa2;
        int f,dysk,Ram;
 
         cout<<"nazwa procesora :"<<endl;                                       
         cin>>nazwa1; 

Do zmiennej nazwa1 i nazwa2 nie pomieścisz więcej niż 1 literę.

Co do wypisywania.

Komputer nowyKomputer;
nowyKomputer.wypisz(); 

Lub jeżeli wypisz zrobisz static.

 
// np. static void wypisz()

Komputer.Wypisz();

1 użytkowników online, w tym zalogowanych: 0, gości: 1