static也就是静态的意思,在类中静态的操作有两个一个是对成员变量以及成员函数,只需要在原有状态上加个static。比如int a 改成static int a就变为静态成员变量了。
重点:
静态成员变量:
1. 所有对象共享同一份数据
2. 在编译阶段分配好内存
3. 类内声明类外初始化。
静态成员函数:
1. 所有对象共享同一份数据
2. 静态成员函数只能访问静态成员变量
首先我们来讨论静态成员变量!
思路!:
1. 记住!静态成员变量一定是类外初始化的!
2. 成员变量的访问有两种!一种是通过对象去访问!一种是通过作用域访问
3. 还有一点!静态成员变量也是有访问权限的这里我就不写了,至于怎么访问到?可以通过成员函数,或者静态成员函数去访问!
#include<iostream>
#include<string>
using namespace std;
class Person
{
public:
Person(int a ,int h)//有参构造!当然你也可以无参构造!
{
this->age = a;
this->height=h;
}
void print()
{
cout << "姓名:"<<this->name<<" 年龄:" << this->age << " 身高:" << this->height << endl;
}
static string name;//静态成员变量,类内定义类外初始化!
int age;//这是成员变量!非静态!看清楚!
private:
int height;
};
//类外初始化静态成员变量
string Person::name = "法外狂徒张三";//
int main()
{
Person P(23,170);//创建对象!P就是对象我这都是通过有参构造函数得出!
//访问静态成员变量的方式有两种,一种是通过对象去访问,一种是通过类的作用域!
//第一种:
P.name;//如果这里改成P.name="狂徒李四",下面的也会跟着变!所以说在编译阶段分配好内存 ,并且所有对象共享数据!
P.print();
//第二种:
Person P2(25, 180);//P2也是对象
Person::name;
P2.print();
return 0;
}
接下来我们看静态成员函数在类中的操作!
思路!:
1. 静态成员函数也就是在成员函数前面加的static
2. 静态成员函数不能访问非静态成员变量!但是能访问静态成员变量!
3. 获取成员函数的方式也是两种跟访问静态成员变量一样!
#include<iostream>
#include<string>
using namespace std;
class Animal
{
public:
Animal(string n,string w)//有参构造进行初始化!
{
this->name = n;
this->weight = w;
}
void print()
{
cout << "这个动物是" << this->name << "\t年龄为:" << this->age << "\t重量为:" << this->weight << endl;
}
static void play()
{
cout << "这个动物表演胸口碎大石!" << endl;
//string weight = 20;无法访问到非静态成员变量
string pl;//这个能访问到!因为是静态成员变量
}
static string pl;//这个我只是拿来测试的!
static int age;//类内定义类外初始化!
string weight;
private:
string name;
};
int Animal::age = 2;//类外初始化
string Animal::pl = "打个哈欠";
int main()
{
Animal cat("猫猫","3kg");
cat.print();
cat.play();//这个也可以写成Animal::play();
Animal dog("狗狗", "12kg");
dog.print();
Animal::play();
}