当我们可以使用普通函数修改静态数据成员时,静态成员函数的需求是什么?
What is the need of static member functions when we can modify the static data members by using normal functions?
当我们可以使用普通函数修改静态数据成员时,还需要静态成员函数吗?我对静态成员函数的需求感到困惑。请帮我澄清一下...
static
表示(在 class 的上下文中)您始终可以调用 ClassName::MethodName()
之类的方法,而不是 ClassName instance; instance.MethodName
.
意思是——你可以从非静态成员函数调用静态成员函数,但反过来不行,因为静态成员函数不拥有一个或多个 class.
有两个原因:一个是技术上的,另一个是关于代码可读性的。技术方面很简单:静态方法仍然是 class 的一种方法,因此它可以访问它的私有成员。它是 class 的一部分,它知道 class.
的所有内部结构是可以的
但更重要的是 classes 是名称空间。他们构建你的代码。通过使用静态方法,您告诉所有人它属于 class 并且与它紧密相关。
无需创建 class 的任何对象即可调用静态函数。
例如
假设您有一条包含房屋数量的 class 街道和一个将房屋数量递增 1 的静态方法 addHouse()。
你想创建一个新房子,所以你可以在 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.
}
};
What is the need of static member functions
您需要将 class 的成员函数声明为静态的,以便能够在不实例化对象的情况下调用它。例如寻找单例模式。
when we can modify the static data members by using normal functions?
不是所有的时间!除非先实例化一个对象,否则不能从非静态成员函数修改静态数据成员。另一方面,无论是否实例化对象,您始终可以从静态成员函数执行此操作。
class 中的静态表示数据不属于创建的对象,而是属于 class 本身。所有对象的数据都相同(不相等,但地址相同)。
静态方法将使编译器确保它只与静态数据混淆。它还使它更清楚,因为当您看到静态方法时,您知道它不需要任何 'alive' 对象数据。
当我们可以使用普通函数修改静态数据成员时,还需要静态成员函数吗?我对静态成员函数的需求感到困惑。请帮我澄清一下...
static
表示(在 class 的上下文中)您始终可以调用 ClassName::MethodName()
之类的方法,而不是 ClassName instance; instance.MethodName
.
意思是——你可以从非静态成员函数调用静态成员函数,但反过来不行,因为静态成员函数不拥有一个或多个 class.
有两个原因:一个是技术上的,另一个是关于代码可读性的。技术方面很简单:静态方法仍然是 class 的一种方法,因此它可以访问它的私有成员。它是 class 的一部分,它知道 class.
的所有内部结构是可以的但更重要的是 classes 是名称空间。他们构建你的代码。通过使用静态方法,您告诉所有人它属于 class 并且与它紧密相关。
无需创建 class 的任何对象即可调用静态函数。
例如
假设您有一条包含房屋数量的 class 街道和一个将房屋数量递增 1 的静态方法 addHouse()。
你想创建一个新房子,所以你可以在 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.
}
};
What is the need of static member functions
您需要将 class 的成员函数声明为静态的,以便能够在不实例化对象的情况下调用它。例如寻找单例模式。
when we can modify the static data members by using normal functions?
不是所有的时间!除非先实例化一个对象,否则不能从非静态成员函数修改静态数据成员。另一方面,无论是否实例化对象,您始终可以从静态成员函数执行此操作。
class 中的静态表示数据不属于创建的对象,而是属于 class 本身。所有对象的数据都相同(不相等,但地址相同)。
静态方法将使编译器确保它只与静态数据混淆。它还使它更清楚,因为当您看到静态方法时,您知道它不需要任何 'alive' 对象数据。