诚信为本
量力而为
当前位置:ea编程网 EA知识 正文

类和结构的静态成员

1. 静态成员简介

在OOP(面向对象编程)中,静态成员在类中的所有实例之间共享。使用static关键字声明的成员变量存储在一个地方。非静态数据成员为每个类对象变量创建。

如果不能声明类的静态成员,我们可能需要在程序的全局级别声明这些数据,这将打破数据与其类之间的关系。静态成员允许类数据在类范围内存在,而不是特定于特定实例。

静态类成员与特定实例无关,因此对它的引用格式为:class_name::variable。在类方法中访问静态成员时,上下文运算符::是可选的。

2. 静态成员的初始化

静态类成员必须在全局范围内明确初始化。例如,我们有一个用于解析文本的类,我们需要计算处理的单词和字符的总数。只需要将必要的类成员声明为静态并在全局级别初始化它们,然后类的所有实例都将使用公共的单词和字符计数器。

class TextAnalyzer
{
public:
   static int totalWords;
   static int totalCharacters;
};

int TextAnalyzer::totalWords = 0;
int TextAnalyzer::totalCharacters = 0;

3. 静态常量成员

静态类成员可以用const关键字声明,这样的静态常数必须在全局级别与const关键字初始化。

class DataContainer
{
private:
   static const int maxItems;
};

const int DataContainer::maxItems = 100;

4. this指针

关键字this表示指向其本身的隐式声明的指针,即在其上下文中执行方法的类的特定实例。它只能在类的非静态方法中使用。在静态函数中,您只能访问类的静态成员/方法。

5. 静态方法

在MQL4中,可以使用类型为static的成员函数。静态修饰符必须在类内部的声明中位于函数的返回类型之前。

class Box
{
public:
   static int CalculateVolume();
private:
   int length;
   static const int maxHeight;
};

int Box::CalculateVolume()
{
   return maxHeight;
}

const int Box::maxHeight = 10;

6. const修饰符

带有const修饰符的方法被称为常量,不能修改其类的隐式成员。const修饰符确保对象的值的一致性,并在编译期间返回错误(如果存在错误)。

class Shape
{
private:
   double length;
   double width;
public:
   double Area() const;
   static double Area(const double l, const double w);
};

double Shape::Area() const
{
   return Area(length, width);
}

static double Shape::Area(const double l, const double w)
{
   return l * w;
}

通过使用常量性控制,编译器会生成特殊的优化,例如,将常量对象放在只读内存中。静态函数不能用const修饰符确定,因为这个修饰符确保在调用此函数时实例成员的常量性。但是,如上所述,静态函数不能访问非静态类成员。

未经允许不得转载:ea编程网 » 类和结构的静态成员