静态成员

静态成员函数

落爺英雄遲暮 提交于 2019-11-30 12:17:51
就是再成员函数 定义前加一个 static 我们需要了解它的访问方式以及访问权限,以及一些特点 有个博主总结的好 传送门; https://blog.csdn.net/qq_25800311/article/details/85146173 一、静态成员的特点: (1)static数据成员在类的内部声明,但只能在类的外部定义,在类的外部不能指定static,在类的定义时候进行初始化; (2)static数据成员只能在类的外部进行初始化(特例:当整型const static数据成员被常量表达式初始化时,就可以在类的内部进行初始化,但还需要在外部进行定义)。 (3) static数据成员可以是该成员所属的类类型,而非static数据成员只能自身类的引用或者指针。 (4)static数据成员可以用作类成员函数的默认实参。 (5)static数据成员的值可以改变。 二、静态成员和非静态成员的区别: (1) 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类和对象都可以进行访问; (2)不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象访问; (3) 一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。 (4) 静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。 三

C++:static类

纵饮孤独 提交于 2019-11-30 06:29:07
static自我理解 static使得数据成员或者函数生命周期为整个文件所在程序的生命周期, 在C中还可以用它避免被其它文件使用为外部成员 static类 明确:类的静态数据成员它被所有类对象共享,但它是属于类的,而不是类的对象的 定义静态成员: static只出现在类内部的声明语句中 静态成员函数在类的内部与外部均可以定义(只需要在函数声明前加上static) class a1{ .... static void func1(); }; void a1::func1(){...} 因为静态数据成员不属于类的任何一个对象,这意味着它们不是有类的构造函数初始化的,必须在类的外部 定义与初始化每个静态数据成员且只能定义一次 并且最好与其它非内联函数的定义放在一个文件下 类内初始化方法: 我们可以为静态成员提供const 整数类型 类内初始值,不过要求静态成员必须是字面值类型的constexpr eg: static constexpr int period = 30; 静态成员能用于某些场景: 静态数据成员可以是不完全类型: eg: class Bar{ public:... private: static Bar mem1; //OK Bar *mem2; //OK Bar mem3; //ERROR }; 我们可以使用静态成员作为默认实参 eg: class Screen{

C++课程第三次作业——静态成员

纵然是瞬间 提交于 2019-11-30 06:16:59
目录 Part1 基本知识点 1)静态数据成员 2)静态函数成员 Part2 静态函数成员与普通函数成员的对比 Part3 总结 昵称 JusticeXu 学号后六位 061409 博客园链接 JusticeXu的博客园 作业链接 C++课程第三次作业 Part1 基本知识点 1)静态数据成员 面向对象方法中有一个”类属性“的概念。如果某个属性为整个类所共用,不属于任何一个具体对象,则用 static 关键字来声明为静态成员。静态成员在每个类只有一个副本,由该类的所有对象共同维护和使用,从而实现了同一类的不同对象之间的数据共享。 类属性是描述类的所有对象共同特征的一个数据项,对于任何对象实例,它的属性值是相同的。 静态数据成员具有静态生存期。 由于静态数据成员不属于任何一个对象,因此可以通过类名对它进行访问,一般用法是 类名::标识符 。在类的定义中仅仅对静态数据成员进行引用性声明,必须在命名空间作用域的某个地方使用类名限定定义性声明,这时也可以进行初始化。 eg: #include <iostream> using namespace std; class Box { public: static int objectCount; // 构造函数定义 Box(double l=2.0, double b=2.0, double h=2.0) { cout <<

C++——静态成员与this指针

◇◆丶佛笑我妖孽 提交于 2019-11-30 02:33:48
一、静态成员 1.1静态数据成员 被类的实例共享,而不是某个特定类对象 静态数据成员的作用域和初始化 用关键字 static 声明 可以被声明为 public, private, protected 当声明类的数据成员为静态时,无论创建多少个类的对象,静态成员都只有一个副本 在类的所有对象中共享,具有静态生存期 基本数据类型的的静态数据成员默认情况初始化为零 类内声明,类外定义和初始化并用范围解析运算符(::)指明所属的类。int, enum 类型的 const static 数据成员可以在类定义中声明时初始化 具有默认构造函数的类类型的静态数据成员(即静态成员对象)不必初始化,其默认构造函数会被调用 访问静态数据成员 通常通过类的静态成员函数或类的友元访问类的 private, protected 静态成员 当类没有对象时 要访问 public 静态数据成员,需在成员名前加类名和二元作用域运算符(::) 要访问 private, protected 静态数据成员,需提供 public 静态成员函数,并通过在函数名前加类名和二元作用域运算符(::)调用函数 1.2静态成员函数 把成员函数声明为静态的,就可以把函数与类的任何特定对象独立开来 在类对象不存在的情况下也能被调用,使用类名加范围解析运算符 :: 即可访问 静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数

static变量和函数(c/c++)

只愿长相守 提交于 2019-11-29 08:29:50
参考博文https://www.cnblogs.com/yujianfei/p/8974813.html https://www.cnblogs.com/codingmengmeng/p/5906282.html https://blog.csdn.net/guotianqing/article/details/79828100 c语言static关键字用法: 1. 局部变量 普通局部变量存储于进程栈空间,使用完毕会立即释放。 静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。变量在全局数据区分配内存空间;编译器自动对其初始化 ,其作用域为局部作用域,当定义它的函数结束时,其作用域随之结束。    int f(int n) { static s=1; s=s*n; return s; } main(){ int i; for(i=1;i<=5;i++) f(i); } 以上程序利用静态变量的性质,求出5!,然使用静态变量会消耗更多的内存,同时程序可读性降低,所以不多用; 2. 全局变量   全局变量定义在函数体外部,在全局数据区分配存储空间,且编译器会自动对其初始化。   普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用

c++类的静态成员特性

你离开我真会死。 提交于 2019-11-29 06:17:48
1、我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 2、静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。 3、如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用, 静态函数 只要使用类名加范围解析运算符 :: 就可以访问。 4、静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。 5、静态成员函数有一个类范围,他们不能访问类的 this 指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。 6、 静态成员函数与普通成员函数的区别: 静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。 普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。 ps: 类中特殊成员变量的初始化问题: 常量变量:必须通过构造函数参数列表进行初始化。 引用变量:必须通过构造函数参数列表进行初始化。 普通静态变量:要在类外通过"::"初始化。 静态整型常量

面试问题之C++语言:说一下static关键字的作用

时光怂恿深爱的人放手 提交于 2019-11-29 05:58:41
1、全局静态变量   在全局变量加上关键字static,全局变量就定义成一个全局静态变量,存放于静态存储区,在整个程序运行期间一直存在;未经初始化的全局静态变量会被自动初始化为0;全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。 2、局部静态变量   在局部变量之前加上关键字static,局部变量就成为一个局部静态变量,局部静态变量只初始化一次。作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变。 3、静态函数   在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;   注意:不要在头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰。 4、类的静态数据成员   在类中,静态数据成员可以实现多个对象之间的额数据共享,并且使用静态数据成员还不会破坏隐藏的原则

static的使用总结

依然范特西╮ 提交于 2019-11-29 00:17:56
全局静态变量 全局变量前加上关键字static,全局变量就定义成一个全局静态变量.,全局静态变量存储在静态存储区,在整个程序运行期间一直存在。全局静态变量在程序运行之前就存在。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化)。 作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。 局部静态数据 在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。局部静态变量再程序执行到作用域时候,就会存在。 局部静态数据再内存中的静态存储区。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化)。 作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变。 静态函数 在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。 函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突。 warning:不要再头文件中声明static的全局函数

js静态成员和实例成员

孤人 提交于 2019-11-28 22:22:59
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> function Hero(name, blood, weapon) { // 实例成员 / 对象成员 -- 跟对象相关的成员,将来使用对象的方式来调用 this.name = name; this.blood = blood; this.weapon = weapon; this.attack = function () { console.log(this.weapon + ' 攻击敌人'); } } // 静态成员 -- 直接给构造函数添加的成员 Hero.version = '1.0'; var hero = new Hero('刘备', 100, '剑'); hero.attack(); var hero1 = new Hero('关羽', 100, '刀'); hero1.attack(); // 静态成员不能使用对象的方式来调用 console.log(hero.version); // 静态成员使用构造函数来调用 console.log(Hero.version); </script> </body> </html> 来源: https://www

PHP 的 self 关键字用法

£可爱£侵袭症+ 提交于 2019-11-28 12:22:24
之前有人询问 self 关键字的用法,答案是比较明显的:静态成员函数内不能用 this 调用非成员函数,但可以用 self 调用静态成员函数/变量/常量;其他成员函数可以用 self 调用静态成员函数以及非静态成员函数。随着讨论的深入,发现 self 并没有那么简单。鉴于此,本文先对几个关键字做对比和区分,再总结 self 的用法。 与 parent 、 static 以及 this 的区别 要想将彻底搞懂 self ,要与 parent 、 static 以及 this 区分开。以下分别做对比。 parent self 与 parent 的区分比较容易: parent 引用父类/基类被隐盖的方法(或变量), self 则引用自身方法(或变量)。例如构造函数中调用父类构造函数: class Base { public function __construct() { echo "Base contructor!", PHP_EOL; } } class Child { public function __construct() { parent::__construct(); echo "Child contructor!", PHP_EOL; } } new Child; // 输出: // Base contructor! // Child contructor! static