1.静态数据成员:
(1)声明:声明时要+static
(2)作用域:静态数据成员存放在一个固定的内存中,不会属于某个具体的对象,即使创建多个对象,也只为该变量分配一次内存,所有对象使用的都是这份内存中的数据。
(3)同样遵循public,private等原则
(4)初始化: 在类内定义,类外声明
声明的格式 <数据类型><类名>::静态数据成员 = <值> ,不能在定义时赋值(5)优点:不同的对象可以共享静态数据成员,该类的所有对象都共享这块静态存储空间它不属于某一个对象,它与整个程序的生命周期相同,即使某个对象消亡了,静态数据成员还存在,没有改变
(6)访问静态成员:
1.通过作用域运算符::直接访问静态成员 类名::静态成员
2.通过对象.静态成员
3.通过指针->静态成员
2.静态成员函数
1.作用:
与静态数据成员不同的是,静态成员函数不是为了联系各对象,而是用来访问静态数据成员
2.静态成员函数只能访问static下的静态数据成员和静态成员函数
3.非static成员函数既可以访问static数据成员,也可以访问非static数据成员。static成员函数只能访问satic成员
4.static函数不含有this指针,因为他不属于某个对象
题目描述:
学生类定义如下:
class Student {
private:
int id;//学号
int score; //成绩
static int maxscore;//最高分数
static int maxid;//最高分数学生学号
public:
Student(int ti=0,int ts=0)
:id(ti), score(ts)
{}
static void findMax(Student & st); //寻找最高成绩和学号
static int getMaxScore(); //返回最高成绩
static int getMaxID();//返回最高成绩的学号
};
输入一组学生学号和成绩,用上述静态成员求最高成绩和对应学号
输入:
第一行输入n表示有n个学生
接着输入n行,每行包括两个数据,表示学号和成绩
输出:
调用静态成员函数输出学号和最高成绩,格式看样例
ac代码:
#include <bits/stdc++.h>
using namespace std;
class Student {
private:
int id;//学号
int score; //成绩
static int maxscore;//最高分数
static int maxid;//最高分数学生学号
public:
Student(int ti = 0, int ts = 0) :id(ti), score(ts) {}
static void findMax(Student& st); //寻找最高成绩和学号
static int getMaxScore(); //返回最高成绩
static int getMaxID();//返回最高成绩的学号
};
void Student::findMax(Student& st)
{
if (st.score > maxscore)
{
maxscore = st.score;
maxid = st.id;
}
}
int Student::getMaxID()
{
return maxid;
}
int Student::getMaxScore()
{
return maxscore;
}
int Student::maxid = 0;
int Student::maxscore = 0;
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int id, score;
cin >> id >> score;
Student st(id, score);
Student::findMax(st);
}
cout << Student::getMaxID() << "--" << Student::getMaxScore() << endl;
return 0;
}