2016-11-16 437 views
1

我是编程的第一年级学生,我需要一些帮助。 我有公共类的代码,但我需要将公共更改为私有。这对我不起作用。也许有人可以帮我提一些建议?这是我的工作代码与公共对象,但我需要私人。我怎样才能做到这一点?将C++类私有变量转换为公开

这是我的类的文件:

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;   
}; 

我的代码: 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

你想要pr可以移动类中的逻辑而不是getter/setter。 – Jarod42

回答

5

你的老师可能要你使用getters内。

在:

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

你要访问所有这些成员,但防止外部变化。

所以,你可以更改您的代码:

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;   
    }; 

,并使用这些getters而不是对象本身在功能:

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

至于setters去,你可以设置你的价值观在构造函数中,或以相同的方式实现:

public: 

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

你可以重写你的类变量是私有的,然后使用getter和setter修改它们。

class C { 
private: 
    int id; 

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

也可以使私人class的另一class

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