c++中使用私有类数据的程序

c++ using private class data in a program

本文关键字:数据 程序 c++      更新时间:2023-10-16

我知道私有类数据只能在类内访问;然而,我所阅读的示例显示了在程序代码中对私有成员的类似使用。我试图使用函数来访问和操纵私有类成员,但它不起作用。我做错了什么?我已经尝试将Data. selectionf ()函数替换为Data。对于所有使用select 成员变量而不成功的实例,在第一个cin之后选择。我还对成员变量的所有实例尝试了相同的方法。由于

 #include <iostream>
    #include <iomanip>
    using namespace std;    
    class allData {
    private: 
        char selection; 
        double r; 
        double centimeter; 
        double value; 
    public: 
        double ConvertC (double value);
        double ConvertR (double value);
        double valueF (double value); 
        char selectionF (char selection); 
        allData Data (); 
    } Data;
    int main() {
    cout << "Enter C for converting your Feet to Centimeters.n"
            "Enter R for converting your Inches to Centimeters.n";
    cin >> Data.selection; 
    cout << "nYou selected to convert to: " <<   
             Data.selectionF(Data.selection) << ".nn"; 
    cout << "Enter your starting value to two decimal places, and press 
             ENTER.nn"; 
    cin >> Data.value; 
    cout << "nYou entered a starting value of: " << 
              Data.valueF(Data.value) << ".nn"; 
    //switch to decide which conversion function to use from the structure
    switch (Data.selectionF(Data.selection)) {
        case 'c': { Data.ConvertC(Data.value);  
            cout << "Your Feet converted to Centimeters is: " << 
            Data.ConvertC(Data.value) << "nn"; 
            break; 
                  }
        case 'C': { Data.ConvertC(Data.value);  
             cout << "Your Feet converted to Centimeters is: " << 
             Data.ConvertC(Data.value) << "nn"; 
             break; 
                  }
        case 'r': { Data.ConvertR(Data.value);  
             cout << "Your Inches converted to Centimeters is: " << 
             Data.ConvertR(Data.value) << "nn"; 
             break; 
                  }
        case 'R': { Data.ConvertR(Data.value);  
            cout << "Your Inches converted to Centimeters is: " << 
            Data.ConvertR(Data.value) << "nn"; 
            break; 
                  }
       default: {cout << "You entered an invalid selection for your conversion"   
            "choice.n"; 
            break; 
                 }
        }
    return 0; 
       }
    //Function definitions
    double allData::ConvertC (double value) {
        centimeter = value * 30.48;
        return centimeter; 
    }
    double allData::ConvertR (double value) {
        r = value * 2.54; 
        return r; 
    }
    double allData::valueF (double value) {
        return value; 
    }
    char allData::selectionF (char selection) {
        return selection; 
    }
    //End of program.

无论你读过什么例子,要么他们是错的,要么你误解了他们。您不能在类之外访问私有类成员(当然,friend声明除外)。根据定义,这就是私有类成员的含义。

cin >> Data.selection; 

selection是一个private类成员。它不能从你的main()访问。这差不多就是我能说的了。

如果我没有误解你的问题,让我告诉你一些你的问题。首先,使用这行"cin >> Data.value;",您试图获得"DATA"类的私有值,事实上这是错误的。您不能从"DATA"类的外部访问私有变量。对象"DATA"不在"DATA"类中。另一方面,如果您想间接访问类中的私有变量,那么您可以编写这样的函数:

public:
void function_name(const DATA &dataObject) const
{
    cout << "The selection value : " << dataObject.selection << endl;
}

这部分代码将间接访问类中的私有变量。请记住,如果函数在类中,那么它可以访问所有的私有变量,这段代码没有任何问题。

相关文章: