(一)、什么是静态函数?
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; }
效果展示:
如有未解问题,可联系博主。