2016-11-16 1 views
1

Je suis un étudiant de première année en programmation et j'ai besoin d'aide. J'ai du code avec la classe publique mais j'ai besoin de changer de public à privé. Et ça ne marche pas pour moi. Peut-être que quelqu'un peut m'aider avec quelques suggestions? Voici mon code de travail avec des objets publics, mais j'ai besoin de privé. Comment puis je faire ça?Transformer les variables privées de la classe C++ en public

Ce sont les fichiers de ma classe:

Klientas.h:

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cmath> 
#include <iomanip> 

using namespace std; 

class Klientas 
{ 
public: 
    string vardas; 
    double lesos; 
}; 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <cmath> 
#include <iomanip> 
using namespace std; 

Klipas.h:

class Klipas 
{ 
public: 
    string produktas;   
    string grupe;    
    double trukme;    
    double krastine1;   
    double krastine2;  
    double plotas;    
    double klipoSekKaina;  
    double klipoKaina;   
}; 

Mon code: Lab_1.cpp

#include "Klipas.h" 
#include "Klientas.h" 

using namespace std; 
//--------------------------------------------- 

int main() { 
    setlocale(LC_ALL, "Lithuanian"); 
    Klipas K[100]; 
    int na; 
    Klientas kl; 

    // Iš failo fv įveda duomenis į objektų masyvą K(kiek). 
    ĮvestiDuomenis("Duomenys.txt", K, na); 
    SpausdintiDuomenis("Rezultatai.txt", K, na); 
} 

void ĮvestiDuomenis(string fv, Klipas K[], int & kiek) { 
    ifstream fd ("Duomenys.txt"); 

    fd >> kiek; 
    fd.ignore(); 
    for (int i = 0; i < kiek; i++) { 
     getline(fd, K[i].produktas, ','); fd >> ws; 
     fd >> K[i].grupe; 
     fd >> K[i].trukme; 
     fd >> K[i].krastine1; 
     fd >> K[i].krastine2; 
     fd >> K[i].klipoSekKaina; 
     fd.ignore(); 
    } 
    fd.close(); 
// cout << "Programa baigė darbą\n"; 
} 

// Objektų masyvo K(kiek) reikšmes spausdina lentele į failą fv 
void SpausdintiDuomenis(string fv, Klipas K[], int kiek) { 
    ofstream fr("Rezultatai.txt", ios::app); 
    fr.setf(ios::fixed); fr.setf(ios::left); 
    cout << "Klipų skaičius: " << kiek << endl; 
    cout << "Klipų sąrašas:\n"; 
    cout << "----------------------------------------------------\n"; 
    cout << "| Produktas | Grupė | Klipo trukmė(s) | 1 Kraštinė(cm) | 2 Kraštinė(cm) | Klipo sekundės kaina(Eur/s) | \n"; 
    cout << "----------------------------------------------------\n"; 
    for (int i = 0; i < kiek; i++) { 
     cout << "| " << setw(10) << K[i].produktas << "| " << K[i].grupe 
     << setprecision(0) << setw(10) << "| " << K[i].trukme << "| " << setw(15) << K[i].krastine1 << "| " << setw(10) << K[i].krastine2 << "| " << setw(10) << K[i].klipoSekKaina << endl; 
    } 


    { 
     cout << "-------------------------------\n"; 
     cout << "Klipo Kava plotas:" << K[0].krastine1*K[0].krastine2 << " " << "cm2" << endl; 
     cout << "Klipo Obuolys plotas:" << K[1].krastine1*K[1].krastine2 << " " << "cm2" << endl; 
     cout << "Klipo Sultys plotas:" << K[2].krastine1*K[2].krastine2 << " " << "cm2" << endl; 
     cout << "-------------------------------\n"; 
    } 

    string ilg_trukme; // randame kuris klipas yra ilgiausias 
    if (K[0].trukme > K[1].trukme) { 
     ilg_trukme = K[0].produktas; 
    } else if (K[1].trukme > K[2].trukme) { 
     ilg_trukme = K[1].produktas; 
    } else { 
     ilg_trukme = K[2].produktas; 
    } 
    cout << "Ilgiausias klipas: " << ilg_trukme << endl; 
    cout << "-------------------------------\n"; 

    { 
     K[0].klipoKaina = K[0].trukme * K[0].klipoSekKaina; 
     K[1].klipoKaina = K[1].trukme * K[1].klipoSekKaina; 
     K[2].klipoKaina = K[2].trukme * K[2].klipoSekKaina; 
     cout << "Klipo Kava Kaina:" << K[0].klipoKaina << " " << "Eur." << endl; 
     cout << "Klipo Obuolys Kaina:" << K[1].klipoKaina << " " << "Eur." << endl; 
     cout << "Klipo Sultys Kaina:" << K[2].klipoKaina << " " << "Eur." << endl; 
     cout << "-------------------------------\n"; 
    } 
    { 
     string brangiausias_klipas; //randame kuris klipas brangiausias 
     double br_kl; 
     Klientas kl; 
     if (K[0].klipoKaina > K[1].klipoKaina && K[0].klipoKaina > K[2].klipoKaina) { 
      brangiausias_klipas = K[0].produktas; 
      br_kl = K[0].klipoKaina; 
     } else if (K[1].klipoKaina > K[2].klipoKaina) { 
      brangiausias_klipas = K[1].produktas; 
      br_kl = K[1].klipoKaina; 
     } else { 
      brangiausias_klipas = K[2].produktas; 
      br_kl = K[2].klipoKaina; 
     } 
     cout << "Brangiausias klipas yra: " << brangiausias_klipas << endl; 
     cout << "-------------------------------\n"; 

     cout << "Kiek jūs turite pinigų? " << endl; //kliento turimos pajamos 
     cin >> kl.lesos ; 
     cout << "-------------------------------\n"; 
     //Randame kuriuos klipus klientas glaėtų įsigyti su savo pajamom 
     { 
      if(kl.lesos < K[0].klipoKaina && kl.lesos < K[1].klipoKaina && kl.lesos < K[2].klipoKaina) { 
       cout << "Jūs negalite nusipikrti nei vieno klipo " << endl; 
      } else { 
       if(kl.lesos >= K[0].klipoKaina) { 
       cout << "Jūs galite nusipirkti klipą " << K[0].produktas << endl; 
       } 
       if (kl.lesos >= K[1].klipoKaina) { 
       cout << "Jūs galite nusipirkti klipą " << K[1].produktas << endl; 
       } 
       if (kl.lesos >= K[2].klipoKaina) { 
        cout << "Jūs galite nusipirkti klipą " << K[2].produktas << endl; 
       } 
      } 
     } 
    } 
} 
+0

Vous voulez pr déplacer la logique dans la classe au lieu de getter/setter. – Jarod42

Répondre

5

Votre professeur veut probablement vous d'utiliser getters.

Dans:

class Klipas 
{ 
public: 
    string produktas;   
    string grupe;    
    double trukme;    
    double krastine1;   
    double krastine2;  
    double plotas;    
    double klipoSekKaina;  
    double klipoKaina;   
    }; 

Vous voulez avoir accès à tous ces membres, mais éviter les changements externes.

Vous pouvez changer votre code:

class Klipas 
{ 
public: 
    string GetProduktas() {return produktas;}   
    string Getgrupe()  {return grupe;}    
    double Gettrukme()  {return trukme;}    
    double Getkrastine1() {return krastine1;}   
    double Getkrastine2() {return krastine2;}  
    double Getplotas()   {return plotas;}    
    double GetklipoSekKaina(){return klipoSekKaina;}  
    double GetklipoKaina() {return klipoKaina;}   
private: 
    string produktas;   
    string grupe;    
    double trukme;    
    double krastine1;   
    double krastine2;  
    double plotas;    
    double klipoSekKaina;  
    double klipoKaina;   
    }; 

et utiliser les getters au lieu des objets eux-mêmes dans votre fonction:

fd >> K[i].Getgrupe(); 
    fd >> K[i].Gettrukme(); 
    fd >> K[i].Getkrastine1(); 
    fd >> K[i].Getkrastine2(); 
    fd >> K[i].GetklipoKaina(); 

Quant à setters aller, vous pouvez définir vos valeurs dans le constructeur, ou mettre en œuvre de la même manière:

public: 

void SetProduktas(string prdkt) {produktas = prdkt;} 
5

Vous pouvez réécrire vos variables de classe pour être privé, puis utiliser accesseurs de les modifier.

class C { 
private: 
    int id; 

public: 
    int get_id() { return this->id; } 
    void set_id(int newId) { this->id = newId; } 
}; 

Ou vous pouvez faire class privé à l'intérieur d'un autre class

class A { 
private: 
    class D {}; 
};