个人做当地旅游网站,旅游网站制作教程,玻璃钢产品哪个网站做推广好,中铁建设集团企业门户目录
C语言中静态变量
C静态成员变量
C静态成员函数 C语言中静态变量
1.函数内部用static修饰的变量#xff0c;只能在此函数使用#xff0c;但所修饰的变量不随函数释放而释放#xff0c;下次调用时的值仍为上次结束时的值2.static修饰的全局变量只能在其定义的文件使用…目录
C语言中静态变量
C静态成员变量
C静态成员函数 C语言中静态变量
1.函数内部用static修饰的变量只能在此函数使用但所修饰的变量不随函数释放而释放下次调用时的值仍为上次结束时的值2.static修饰的全局变量只能在其定义的文件使用3.static修饰的函数只能在其所在的文件中被调用 知识点static修饰的静态成员变量或成员函数是在编译链接过程中就分配好了内存空间而普通成员函数是在运行过程中分配空间根据 分配空间的时间点 这个知识点理解下文
C静态成员变量
1.C类中的成员变量放置在全局静态变量区2.C类中的静态成员变量可以多个类成员之间数据共享3.C类中的成员变量必须在对应的cpp文件中进行定义类成员函数只是声明可以类比C中extern声明的int变量4.C类中静态成员变量不能在构建函数中以列表方式初始化
// a.h文件class A
{
public:// A():i(10){}//错误不能以列表方式初始化静态成员变量A(){ i 10; } //正确void set(int ii) { i ii; }void print(void) { cout A::i i endl; }
private:static int i;
}//main.cpp文件int A::i; //类成员变量必须在对应cpp中进行定义且不能用static修饰。否则与C标准中static修饰变量只能在本文件使用的规则冲突从而报错int main(void)
{A a,b;b.set(20); //成员变量b对i进行赋值a.print(); //最后输出 A::i 20, 静态成员变量可以多个类成员之间数据共享return 0;
}C静态成员函数
1.static成员函数内不能使用this指针2.static修饰的成员函数只能处理static修饰的成员函数或变量3.static修饰的成员函数可以在类没有实例化时调用
class A
{
publicA(){ }void print(void){ cout A::print() endl;}static void fun(void){cout i: i endl; //正确
//下面错误写法的原因都是 类A未实例化在内存中未分配空间导致找不到对应变量或函数
// cout i: this-i endl; //报错“this”: 只能在非静态成员函数或非静态数据成员初始值设定项的内部引用
// print(); //报错“A::printf”: 非静态成员函数的非法调用
// cout k: k endl; //报错对非静态成员“A::k”的非法引用
//原因当main函数使用 A::fun()调用此函数时k并未定义所以找不到k}
private:static int i;int k;
}int main(void)
{
// A::print(); //错误 非static成员函数只能实例化后调用A::fun(); //正确在编译链接时期就对static成员函数分配了空间可以直接调用return 0;
} static修饰类实例
1.静态类实例化时是在编译链接时就已经分配好空间但在使用时进行初始化2.类实例化用static修饰时它的析构函数在程序执行完成之后执行而非对应的函数执行完毕3.多个cpp文件定义static的类实例化时类的构造函数执行是随机的
//a.h文件
class A
{
public:A() : i(0){ cout A() endl; }void print(void) { cout A::i i endl; }
private:int i;
};//b.cpp文件
void b_fun()
{static A bFun;
}//c.cpp文件
void c_fun()
{static A cFun;
}//main.cpp文件
int main(void)
{cout Main Begin! endl;static A a;a.print();cout Main end! endl;return 0;
}//b.cpp和c.cpp中的 bFun 和 cFun 的分配内存时间不能确定先后顺序