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

how to call a private member function in c++

本文关键字:成员 函数 调用 c++      更新时间:2023-10-16

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

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

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

不能从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();
}

我正在写一个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变成cricketfriend:

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

但这是非常深奥的,令人困惑的,意想不到的,奇怪的和不可维护的;

只能从类内部调用私有成员函数,或者从类的友类调用私有成员函数(但是应该避免使用友类)。

你只能在你的类中调用它,当然你可以在公共方法中调用它,这样你就可以在你的main中(在你的类之外)使用它。