做网站最快多久,密云建设银行招聘网站,兰州网站建设lzwlxc,wordpress图片属性添加图片不显示在类中#xff0c;static 除了可以声明静态成员变量#xff0c;还可以声明静态成员函数。普通成员函数可以访问所有成员#xff08;包括成员变量和成员函数#xff09;#xff0c;静态成员函数只能访问静态成员。
编译器在编译一个普通成员函数时#xff0c;会隐式地增加…在类中static 除了可以声明静态成员变量还可以声明静态成员函数。普通成员函数可以访问所有成员包括成员变量和成员函数静态成员函数只能访问静态成员。
编译器在编译一个普通成员函数时会隐式地增加一个形参 this并把当前对象的地址赋值给 this所以普通成员函数只能在创建对象后通过对象来调用因为它需要当前对象的地址。而静态成员函数可以通过类来直接调用编译器不会为它增加形参 this它不需要当前对象的地址所以不管有没有创建对象都可以调用静态成员函数。
普通成员变量占用对象的内存静态成员函数没有 this 指针不知道指向哪个对象无法访问对象的成员变量也就是说静态成员函数不能访问普通成员变量只能访问静态成员变量。
普通成员函数必须通过对象才能调用而静态成员函数没有 this 指针无法在函数体内部访问某个对象所以不能调用普通成员函数只能调用静态成员函数。
静态成员函数与普通成员函数的根本区别在于普通成员函数有 this 指针可以访问类中的任意成员而静态成员函数没有 this 指针只能访问静态成员包括静态成员变量和静态成员函数。
通过静态成员函数来获得学生的总人数和总成绩
#include iostream
using namespace std;class Student{
public:Student(char *name, int age, float score);void show();
public: //声明静态成员函数static int getTotal();static float getPoints();
private:static int m_total; //总人数static float m_points; //总成绩
private:char *m_name;int m_age;float m_score;
};int Student::m_total 0;
float Student::m_points 0.0;Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){m_total;m_points score;
}
void Student::show(){coutm_name的年龄是m_age成绩是m_scoreendl;
}
//定义静态成员函数
int Student::getTotal(){return m_total;
}
float Student::getPoints(){return m_points;
}int main(){(new Student(张三, 15, 90.6)) - show();(new Student(李四, 16, 80.5)) - show();(new Student(王五, 16, 99.0)) - show();(new Student(赵六, 14, 60.8)) - show();int total Student::getTotal();float points Student::getPoints();cout当前共有total名学生总成绩是points平均分是points/totalendl;return 0;
}运行结果
张三的年龄是15成绩是90.6
李四的年龄是16成绩是80.5
王五的年龄是16成绩是99
赵六的年龄是14成绩是60.8
当前共有4名学生总成绩是330.9平均分是82.725总人数 m_total 和总成绩 m_points 由各个对象累加得到必须声明为 static 才能共享getTotal()、getPoints() 分别用来获取总人数和总成绩为了访问 static 成员变量我们将这两个函数也声明为 static。
在C中静态成员函数的主要目的是访问静态成员。getTotal()、getPoints() 当然也可以声明为普通成员函数但是它们都只对静态成员进行操作加上 static 语义更加明确。
和静态成员变量类似**静态成员函数在声明时要加 static在定义时不能加 static**。静态成员函数可以通过类来调用一般通过类来进行调用也可以通过对象来调用。