c++ - 将 C++ 类私有(private)变量转换为公共(public)变量

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

我是编程专业的一年级学生,我需要一些帮助。 我有公共(public)类(class)的代码,但我需要将公共(public)类(class)更改为私有(private)类(class)。它对我不起作用。也许有人可以帮我一些建议?这是我使用公共(public)对象的工作代码,但我需要私有(private)。我该怎么做?

这是我类(class)的文件:

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

最佳答案

你的老师可能希望你使用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;          
    };

并在您的函数中使用那些 getter 而不是对象本身:

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

关于c++ - 将 C++ 类私有(private)变量转换为公共(public)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642883/

相关文章:

c++ - 为什么我不能在另一个函数中定义一个函数?

java - Java中如何调用同一个类的方法?

java - 通过一个Database类访问数据库,紧耦合?破坏建议零售价?

oop - 一些可靠的 OOP 批评?

c++ - 使用 doxygen 记录 C++ 概念?

c++ - NULL 不匹配模板参数?

android - 如何正确构建我的 Android 应用程序、类、 View 、数据库,变得简单?

c++ - union 行为

java - 使用返回数据的 Getter 和 Setter

c++ - 如何有效地在窗口中滚动 1024x90000 图像?