做网站用的书,商丘网站建设哪家值得信任,个人简历模板word格式免费下载,做安全平台网站目录 一、static成员是什么#xff1f; 二、为什么需要static成员#xff1f; 三、怎么使用static成员#xff1f; 1. 定义static成员变量 2. 定义static成员函数 3. 访问static成员 四、特性 【面试题】 【总结】 一、static成员是什么#xff1f; 被static修饰的类成…目录 一、static成员是什么 二、为什么需要static成员 三、怎么使用static成员 1. 定义static成员变量 2. 定义static成员函数 3. 访问static成员 四、特性 【面试题】 【总结】 一、static成员是什么 被static修饰的类成员称为类的静态成员用static修饰的成员变量称之为静态成员变量用static修饰的成员函数称之为静态成员函数。 二、为什么需要static成员 我们如何能快速的知道一个类有多少个对象其中一个方法就是通过static成员来计算 //我们如何能快速的知道一个类有多少个对象其中一个方法就是通过static成员来计算
#includeiostream
using std::cin; using std::cout; using std::endl;class A{
public:A(){count;}A(const A a){count;}void PrintC(){cout count endl;}
private:static int count;
};int A::count 0;int main()
{A a, b;A c(a);a.PrintC(); // 结果为3。return 0;
} 从以上例子可看出static成员的一个作用是作为计数器或标志static成员变量可以用作类的计数器或标志以跟踪类的实例数量或记录某些类级别的状态。 static成员的作用 共享数据static成员变量是类的所有实例共享的它们在所有类的实例之间保持一致。这意味着无论创建多少个类的实例它们都共享相同的static成员变量。这对于需要在类的所有实例之间共享数据的情况非常有用。 类级别操作static成员函数是类的成员函数而不是实例的成员函数。它们可以在没有类实例的情况下被调用因为它们不依赖于任何特定的实例数据。这使得它们能够执行类级别的操作例如访问和修改只与类有关的数据例如类的计数器。 避免重复定义static成员变量和函数可以用来避免重复定义。它们只在类的定义文件中声明一次而不是在每个实例中定义。 实现单例模式static成员在实现单例设计模式时非常有用。单例模式确保一个类只有一个实例并提供一个全局访问点来获取该实例。这通常是通过使用static成员如静态实例指针和静态获取实例的方法来实现的。 三、怎么使用static成员
1. 定义static成员变量 以下是定义static成员变量的步骤和示例 在类声明中声明static成员变量。(类内要写static) 在类外部使用类名加作用域限定符::来初始化、访问和修改static成员变量。(类外不需要写static) class A{
private:static int count;
};int A::count 0;2. 定义static成员函数 static成员函数可以将声明和定义都写在类中也可以将声明和定义分离在类外定义函数体。 eg1. 将声明和定义都写在类中 class A{
public:static void PC(){cout 1 endl;}
};eg2. 声明和定义分离 class A{
public:static void P();
};void A::P() // 在类外定义时不需要写static
{cout count endl;
}对于比较短的函数可以直接在类中定义且在static后加上inline使其成为内联函数。 3. 访问static成员 类静态成员可用 类名::静态成员 或者 对象.静态成员 来访问 class A{
public:static void P1(){cout 1 endl;}static int a;
};int A::a 0;int main()
{// 静态成员可以直接不创建对象直接通过类来访问A::a 1;A::P1();// 静态成员也可以通过对象来访问A b;b.P1();b.a;return 0;
} 四、特性 静态成员为所有类对象所共享不属于某个具体的对象存放在静态区。静态成员变量必须在类外定义初始化也需要在类外完成定义时不添加static关键字类中只是声明。可以直接使用类名调用静态成员函数而不需要创建类的实例。类静态成员可用 类名::静态成员 或者 对象.静态成员 来访问。静态成员函数没有隐藏的this指针不能访问任何非静态成员。静态成员也是类的成员受public、protected、private 访问限定符的限制。 7. 静态成员函数无法调用非静态成员。 非静态成员变量或非静态成员函数是属于类的实例的需要通过实例对象来访问但是静态成员函数中没有隐式的指向实例对象的this指针故静态成员函数不可调用非静态成员函数 如果静态成员函数需要访问非静态成员可以考虑将非静态成员作为参数传入静态成员函数中。 【面试题】 1. 静态成员函数可以调用非静态成员函数吗 不可以。非静态成员需要通过实例对象来访问。 2. 非静态成员函数可以调用类的静态成员函数吗 可以。静态成员函数可以直接通过类来调用不需要通过实例对象。 【总结】 ------------------------END-------------------------
才疏学浅谬误难免欢迎各位批评指正。