将c ++类私有变量转换为public

时间:2016-11-16 21:41:39

标签: c++ class oop c++11 private-members

我是编程的第一年学生,我需要一些帮助。 我有公共类的代码,但我需要将公共更改为私有。它对我不起作用。也许有人可以帮我提一些建议?这是我使用公共对象的工作代码,但我需要私有。我怎么能这样做?

这是我班级的档案:

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

2 个答案:

答案 0 :(得分:5)

您可以将类变量重写为私有,然后使用 getters and setters 进行修改。

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

答案 1 :(得分: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 go,您可以在构造函数中设置值,也可以以相同的方式实现:

public:

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