can we apply static to members?
-
static means
-
hidden:A static member is a member
-
persistent:?independent of instances -
static members are class-wide
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,也不能用非静态成员函数或变量。
|