静态函数
(一)、什么是静态函数?
c语言中static的语义
1.static变量
static变量:1).
局部a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。
b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。
static变量:2).
全局全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。
2.static函数(也叫内部函数)
只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于一般的非静态函数(外部函数) static在c里面可以用来修饰变量,也可以用来修饰函数。 先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不包含堆,不要弄混。
(二)、静态数据成员
1.空间分配和释放
(2)静态数据成员不随对象的建立而分配空间,也不随对象的撤销而释放(一般数据成员是在对象建立时分配空间,在对象撤销时释放)。静态数据成员是在程序编译时被分配空间的,至程序结束时才释放空间。
2.静态数据成员初始化
(3)静态数据成员可以初始化,但只能在类体外进行初始化。
注意:静态数据成员不能用参数初始化表对其初始化。
在类内初始化必须前面加一个const static int
在类内,只有常量静态数据才能在类内初始化
#include <iostream>
using namespace std;
class Student
{
public:
const static int score=3;
int age;
int number;
Student(int a, int nu) :age(a), number(nu) {}
Student() {}
void set()
{
cout << "请输入学生的年龄和学号" << endl;
cin >> age >> number;
}
static void show()
{
cout << score<< endl;
}
};
int main()
{
Student::show();
return 0;
}
效果展示:
如在定义Box类中这样定义构造函数是错误的:Box(inth,int w,int len):height(h){}
【初始化列表案列】
【静态数据成员不能再类内初始化案列】
【静态数据成员在类外初始化】
#include <iostream>
using namespace std;
class A
{
private:
static int number;
public:
A() {}
A(int n)
{
number = n;
}
void show()
{
cout << "number的值为:" << number << endl;
}
};
int A::number = 3;
int main()
{
A a;
a.show();
}
3.静态数据成员的访问
(4)静态数据成员可以通过对象名引用,也可以通过类名引用。
代码展示:
#include <iostream>
using namespace std;
class Student
{
public:
const static int score = 3;
int age;
int number;
Student(int a, int nu) :age(a), number(nu) {}
Student() {}
void set()
{
cout << "请输入学生的年龄和学号" << endl;
cin >> age >> number;
}
static void show()
{
cout << score << endl;
}
};
int main()
{
Student s;
cout << Student::score << endl; //类名
cout << s.score << endl; //类对象
Student::show();
return 0;
}
效果展示:
(四)、静态成员函数的初始化
1.注意事项
(1)类的静态成员函数只能访问类的静态数据成员,而不能访问类中的普通函数成员(非静态数据成 员),因为普通数据成员只有类的对象存在时才有意义。(2)静态成员函数与类相联系,而不与类的对象相联系,所以,在类的外部调用类中的公有静态成员 函数,必须在其左面加上“类名::”,而不是通过对象名调用公有静态成员函数。在类的外 部不能调用类中的私有静态成员函数。
2.访问格式:
类名::静态成员函数
代码展示:
#include <iostream>
using namespace std;
class Student
{
public:
int age;
int number;
Student(int a, int nu) :age(a), number(nu) {}
Student() {}
void set()
{
cout << "请输入学生的年龄和学号" << endl;
cin >> age >> number;
}
static void show()
{
cout << "学生的年龄为:" << " " << "学号为:" << endl;
}
};
int main()
{
Student::show();
return 0;
}
效果展示:
如有未解问题,可联系博主。