C++第九篇:静态函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

1.修饰局部变量

作用:会延长局部变量的生存周期。

2.修饰全局变量

作用:普通全局变量具有外部链接属性,只要在其他源文件中通过extern声明,就可以使用该变量。而被static修饰的全局变量,其外部链接属性变为内部链接属性,作用域被限制在定义它的源文件内部,其他源文件无法通过extern声明来访问该变量 。

3.修饰函数

作用:限制函数的作用域,使得该静态函数只能在其定义所在的源文件(.c文件)内部被调用,而不能在其他源文件中通过外部链接来使用。

就是说:对于局部变量,声明周期延长。而对于全局变量和函数而言,是将其定定义内部的,只能在文件(.c文件)内部调用,这样做有两个好处:

1.避免命名冲突:当多个源文件存在相同名称的函数时,将这些函数声明为静态函数,就不会因为函数名相同而在链接时产生冲突。

2.隐藏实现细节:可以把一些只在当前源文件内部使用、不需要被其他源文件访问的函数定义为静态函数,从而将函数的实现细节隐藏起来

二、C++中的静态函数

1.特点:

  • 静态成员变量属于类,只要类存在,静态成员变量就存在
  • 同一类的所有对象共享静态成员变量
  • 静态成员变量必须在类外进行初始化
  • 静态成员变量可以直接通过类名访问(也可以通过对象进行访问)

就是说和静态成员变量只能通过类或对象访问,并且生命周期和程序相同,需要记得初始化静态成员变量

2.代码示例

#include <iostream>
using namespace std;

class Student {
private:
    string name;  // 普通成员变量
    static int totalCount;  // 静态成员变量(所有对象共享)

public:
    Student(string n) : name(n) {
        totalCount++;  // 每次创建对象,总数加1
    }

    // 静态成员函数(可访问静态成员变量)
    static int getTotalCount() {
        return totalCount;
    }
};

// 静态成员变量必须在类外初始化
int Student::totalCount = 0;

int main() {
    Student* p1 = new Student("Alice");
    Student* p2 = new Student("Bob");

    // 通过类名访问静态成员(也可通过对象访问,但不推荐)
    cout << "学生总数:" << Student::getTotalCount() << endl;  // 输出:2

    // 释放动态分配的内存
    delete p1;
    delete p2;

    Student s1("Charlie");
    cout << "学生总数:" << Student::getTotalCount() << endl;  // 输出:3
    return 0;
}
结果如下:

可以发现,不论代码中是否有这个对象存在,这个静态成员变量始终保存在内存当中。这里再次强调,记得初始化静态成员变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值