【问题标题】:c++ using private class data in a programc++ 在程序中使用私有类数据
【发布时间】:2016-07-02 20:27:13
【问题描述】:

我知道私有类数据只能在类内访问;然而,我读过的例子显示了在他们的程序代码中类似地使用私有成员。我正在尝试使用函数来访问和操作私有类成员,但它不起作用。我做错了什么?我已经尝试用 Data.SelectionF() 函数替换第一个 cin 之后的 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.

【问题讨论】:

  • 我想你一定是误解了这些例子。阅读“C++ 中的 getter 和 setter”,然后再试一次。你需要的模式是cin &gt;&gt; localVar; classInstance.setProperty(localVar);

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


【解决方案1】:

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

cin >> Data.selection; 

selection 是私有类成员。无法从您的main() 访问它。差不多就这些了。

【讨论】:

  • 我从未尝试过,但我想知道这是否是在同一命名空间中声明 main 的有效语法:` int allData::main() {`
  • 语法是有效的。但是,它不会是在应用程序启动时执行的 main() 函数。它只是另一个类方法,与 allData::foo() 或 allData::bar() 没有什么不同。
【解决方案2】:

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

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

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

【讨论】:

  • 那么......在我提供的变量的上下文中,我将如何写这个?我尝试了类似于提到的内容但没有成功。
猜你喜欢
  • 2014-03-12
  • 2015-04-02
  • 2022-08-08
  • 2016-04-22
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
相关资源
最近更新 更多