如何在c ++中调用私有成员函数

时间:2014-08-15 09:44:40

标签: c++

我正在编写一个c ++程序,我需要从main函数调用私有成员函数。 请看我的代码:

#include <iostream>

using namespace std;

class cricket
{
private:
    int target_score;
    int overs_bowled;
    int extra_time;
    int penalty;

    void cal_penalty()
    {
        if(extra_time <=10)
            penalty = 1;

            else if(extra_time <=20)
             penalty = 2;

             else
                    penalty = 5;
    }

    public:
        void extradata()
        {
            cout << "\nEnter Target Score : ";
            cin >>target_score;

            cout <<"\nEnter Overs bowled : ";
            cin >> overs_bowled;

            cout << "\nEnter extra time : ";
            cin >> extra_time;
        }

        void displaydata()
        {
            cout << "\nTarget Score : "<< target_score;
            cout << "\nOvers Bowled: " << overs_bowled;
            cout << "\nExtra Time : " << extra_time;
            cout << "\nPenalty : " <<penalty;
        }
};

int main()
{
 cricket c1;
c1.extradata();
c1.displaydata();

return 0;
}

这里我正确地得到了所有输出但我很困惑如何在检查额外时间后显示惩罚值。请编辑我的程序,以便我可以根据额外时间的输入获得惩罚值

4 个答案:

答案 0 :(得分:3)

您无法从main调用私有成员函数。您的公共成员函数可以调用其私有函数。

我想你需要在收到数据后重新计算你的惩罚:

void extradata()
{
        cout << "\nEnter Target Score : ";
        cin >>target_score;

        cout <<"\nEnter Overs bowled : ";
        cin >> overs_bowled;

        cout << "\nEnter extra time : ";
        cin >> extra_time;

        cal_penalty();
}

答案 1 :(得分:1)

  

我正在编写一个c ++程序,我需要调用一个私有成员   功能来自主要功能。

你做不到。这正是首先让它成为private的重点!

要么自己创建函数public,要么添加另一个public函数来调用private函数:

class cricket
{
private:
    // ...
    void cal_penalty_impl()
    {
        // Your original code goes here
        // ...
    }

public:
    // ...
    void cal_penalty()
    {
        cal_penalty_impl();
    }
};

此解决方案非常灵活。


为了完整起见,实际上还有另外一种方法。您可以main friend cricket

class cricket
{
    friend int main();
    // ...
};

但那是非常深奥的,令人困惑的,意想不到的,奇怪的和不可维护的;其中一件事要知道但不好做。

答案 2 :(得分:0)

您只能在课堂内或其朋友中呼叫私人会员功能(但朋友应避免使用)。

如果该函数应该从类外部调用,请将其公开。

答案 3 :(得分:0)

你只能在课堂上打电话,当然你可以在公共方法中调用它,这样你就可以在你的主课堂(课堂外)使用它。