c++在程序中使用私有(private)类数据

标签 c++ class pass-by-reference private-members

我知道私有(private)类数据只能在类内访问;然而,我读过的例子在他们的程序代码中显示了私有(private)成员的类似用法。我正在尝试使用函数来访问和操作私有(private)类成员,但它不起作用。我做错了什么?我已经尝试在第一个 cin 之后用 Data.SelectionF() 函数替换 Data.selection 以及使用 selection 的所有实例成员变量没有成功。我还对 value 成员变量的所有实例尝试了相同的方法。谢谢

 #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) << ".\n\n"; 

    cout << "Enter your starting value to two decimal places, and press 
             ENTER.\n\n"; 

    cin >> Data.value; 

    cout << "\nYou entered a starting value of: " << 
              Data.valueF(Data.value) << ".\n\n"; 

    //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) << "\n\n"; 
            break; 
                  }

        case 'C': { Data.ConvertC(Data.value);  
             cout << "Your Feet converted to Centimeters is: " << 
             Data.ConvertC(Data.value) << "\n\n"; 
             break; 
                  }
        case 'r': { Data.ConvertR(Data.value);  
             cout << "Your Inches converted to Centimeters is: " << 
             Data.ConvertR(Data.value) << "\n\n"; 
             break; 
                  }

        case 'R': { Data.ConvertR(Data.value);  
            cout << "Your Inches converted to Centimeters is: " << 
            Data.ConvertR(Data.value) << "\n\n"; 
            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.

最佳答案

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

cin >> Data.selection; 

selection 是私有(private)类成员。无法从您的 main() 访问它。关于它,几乎就是所有可以说的了。

关于c++在程序中使用私有(private)类数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38164204/

相关文章:

c++ - 如何在不复制的情况下使用 std::string?

c# - 值类型扩展方法是否提供对原始值的写访问?

c++ - 模板化类的模板化成员的函数句柄

c++ - Windows Media Foundation 枚举相机设备

javascript - 带有静态方法的 JS 类看不到静态 setter

javascript - 不明白为什么需要return语句

c++ - 在 C++ 中使用 char* 的特定字符串的子字符串

c++ - Armadillo 库 (C++) : find operation with sparse matrix (sp_mat class)

Python 类构造函数返回空值

c++ - 类型的非常量引用的无效初始化