静态成员变量
- 特殊的成员变量,用关键字static修饰
- 静态成员变量的内存是在类外初始化的时候分配的,在全局数据区分配内存
- 静态成员变量初始化的时候可以赋值也可以不赋值,如果不赋值默认为0
- 类中可以有一个或者多个静态成员变量,类对象共享这些成员变量
- 可以通过类对象访问,也可以通过类名访问,遵循成员访问权限的规则
#include <iostream>
using namespace std;
class Person
{
private:
char *m_name;
int m_score;
public:
static int m_total;
Person(char *name , int score);
~Person();
void show();
};
int Person ::m_total = 0;
Person::Person(char *name , int score)
{
this->m_name = name;
score;
m_total++;
}
Person::~Person()
{
}
void Person::show()
{
cout << "有几个学生:" << "\t" << m_total << endl;
}
int main()
{
Person p("james",99);
p.show();
Person p1("kobe",99);
p1.show();
system("pause");
return 0;
}
静态成员函数
- 编译器在编译普通成员函数时,会将当前对象的地址赋值给this指针,所以只有在创建对象后才能调用普通成员函数
- 静态成员函数不需要当前对象的地址,可以通过类直接调用
- 静态成员函数没有this指针,因此不知道指向哪个对象,所以静态成员函数不能调用普通成员变量,只能调用静态成员变量
#include <iostream>
using namespace std;
class Person
{
private:
char *m_name;
int m_score;
public:
static int m_total;
static int m_points;
static int getPoints();
Person(char *name , int score);
~Person();
};
int Person::m_total;
int Person::m_points;
int Person::getPoints()
{
return m_points;
}
Person::Person(char *name , int score)
{
m_total++;
m_points += score;
}
Person::~Person()
{
}
int main()
{
Person *p1 = new Person("james",99);
Person *p2 = new Person("kobe" , 100);
int total = Person::m_total;
float points = Person::getPoints();
cout << "平均分:\t" << points / total << endl;
delete p2;
delete p1;
system("pause");
return 0;
}