C++ 当我们可以使用普通函数修改静态数据成员时,静态成员函数的需求是什么?

C++ 当我们可以使用普通函数修改静态数据成员时,静态成员函数的需求是什么?,c++,static,static-members,C++,Static,Static Members,当我们可以使用普通函数修改静态数据成员时,静态成员函数的需求是什么。我对静态成员函数的需求感到困惑。请帮我澄清一下……静态意味着在类的上下文中,您可以始终调用方法,如ClassName::MethodName,而不是ClassName实例;instance.MethodName 方法-您可以从非静态成员函数调用静态成员函数,但如果静态成员函数不拥有一个或多个类实例,则不能反过来调用静态成员函数。有两个原因:一个是技术原因,另一个是关于代码可读性。技术方面很简单:静态方法仍然是类的方法,所以它可以

当我们可以使用普通函数修改静态数据成员时,静态成员函数的需求是什么。我对静态成员函数的需求感到困惑。请帮我澄清一下……

静态意味着在类的上下文中,您可以始终调用方法,如ClassName::MethodName,而不是ClassName实例;instance.MethodName


方法-您可以从非静态成员函数调用静态成员函数,但如果静态成员函数不拥有一个或多个类实例,则不能反过来调用静态成员函数。

有两个原因:一个是技术原因,另一个是关于代码可读性。技术方面很简单:静态方法仍然是类的方法,所以它可以访问它的私有成员。它是类的一部分,它知道类的所有内部内容是可以的


但更重要的是类是名称空间。他们构造你的代码。通过使用静态方法,您可以告诉每个人它属于该类,并且与该类密切相关。

可以调用静态函数,而无需创建该类的任何对象。 例如 假设您有一个包含房屋数量的class Street和一个静态方法addHouse,该方法将房屋数量增加1。 您希望创建一个新的house,这样您就可以在house的构造函数中调用addHouse。如果创建了非静态成员,则每次为House创建对象时都必须创建一个新的Street对象

class Street
{
    static int numberOfHouses = 0;
public:
    static void addHouse()
    {
        numberOfHouses ++;
    }
    void incrementHouse()
    {
        numberOfHouses++;
    }


};
class House
{
public:
    House()
    {
        Street::addHouse();
        //this will not create a new object for Street
        Street s;
        s.incrementHouse();
        // you would have to allocate memory for extra object of street class for this.
    }

};
静态成员函数的需求是什么

您需要将类的成员函数声明为静态函数,以便能够在不实例化对象的情况下调用它。。例如,寻找单例模式

什么时候可以使用普通函数修改静态数据成员


不是所有的时间!除非先实例化对象,否则不能从非静态成员函数修改静态数据成员。另一方面,无论是否实例化了对象,您都可以通过静态成员函数执行此操作。

类中的静态表示数据不属于创建的对象,而是属于类本身。对于所有对象,数据将是相同的,但不相等的,相同的地址


静态方法将使编译器确保它只处理静态数据。这也更清楚,因为当你看到一个静态方法时,你知道它不需要任何“活动”对象数据。

今天是否有人对提交的每一篇文章都进行了投票?我不明白,为什么会出现这个问题,普通成员函数也可以访问类的私有成员。有什么只有静态函数可以做而成员不能做的吗?似乎我误解了你的问题。在正规函数下,我理解了通常的自由函数,它们不是任何类的一部分。成员函数通常被称为方法。哦,是的!!!我没有添加正常的成员函数。