【翁恺】26-静态成员

can we apply static to members?

  • static means

    • hidden
    • persistent
  • hidden:A static member is a member

    • obeys usual access rules
  • persistent: independent of instances

  • static members are class-wide

    • variables or
    • functions

static members

  • static member variables
    • global to all class member function
    • initialized once,at file scope
    • provide a place for this variable and init it in .cpp
    • no "static" in .cpp
#include<iostream>
using namespace std;
 
class A 
{
public:
	A() { i = 0; }//不能写成A():i(0){},初始化列表只能对非静态成员进行初始化
	void print() { cout << i << endl; }
	void set(int ii) { i = ii;}
private:
	static int i;  // 声明
};
 
int A::i; //.cpp文件一定要写这句话,否则link找不到,则有static的.h文件一定要有.cpp文件
 
int main()
{
	A a, b;
	a.set(10);
	b.print();
	return 0;
}
//main.cpp

 class {} 内的所有都是声明而不是定义。

i 是全局的,所有的对象的 i 都一样的。

一个类有一对文件 .h .cpp;inline  body可以放到 .h 内;只有 .h  没有 .cpp ,所有都做成 inline;如果有静态成员变量就一定要有 .cpp。int A::i;

stactic  int A::i; // 错误,

int A::i = 20; // 可以

类的声明 放到 .h 文件里如果该类中有static修饰则该类一定要有对应的.cpp文件否则 A::* 的声明没地方放。

初始化列表只能对非静态成员进行初始化

静态成员变量依然是成员变量,通过this指针可以访问静态和非静态成员变量

#include<iostream>
using namespace std;
 
 
class A 
{
public:
	A() { i = 0; }
	void print() { cout << i << endl; }
	void set(int i) { this->i = i;}//静态成员变量依然是成员变量,通过this指针可以访问静态和非静态成员变量
private:
	static int i;
};
 
int A::i;//某个.cpp文件一定要写这句话,否则link找不到
 
int main()
{
	A a, b;
	a.set(10);
	b.print();
	return 0;
}
//main.cpp

可用  A:: *  访问 public 静态成员变量 或 静态成员函数。  

#include<iostream>
using namespace std;
 
 
class A 
{
public:
	A() { i = 0; }
	void print() { cout << i << endl; }
	void set(int i) { this->i = i;}//静态成员变量依然是成员变量,通过this指针可以访问静态和非静态成员变量
	static int i;//其实就是一个静态的变量
};
 
int A::i;//某个.cpp文件一定要写这句话,否则link找不到
 
int main()
{
	A a, b;
	a.set(10);
	b.print();
	cout << a.i << endl;
	cout << A::i << endl;
	return 0;
}
//main.cpp

静态的成员变量一定要在.cpp中定义

initialize list只能对非静态成员初始化

静态的函数只能访问静态的成员变量,原因是静态函数是没有this的--因为需要类的成员函数在没有对象的时候就可以被调用

静态成员函数  不能使用非静态的成员变量。

 this 不能用 在 静态成员函数里。静态成员函数,可以在没有对象的时候就被调用,不能与具体对象联系在一起,因此不能用this,也不能用非静态成员函数或变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理心炼丹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值