命名的长度应该以能准确达意为目标,尽量使用短的命名方式,但是在足够表达其含义的情况下,长的命名也是可以接受的。 在代码列长度有限制的情况下,短的命名会影响代码可读性,因此,命名的长度应该适当。 此外,作用域小的变量,可以使用相对较短的命名,比如一些函数内的临时变量。相反,对于类名这种作用域比较大的,更推荐使用长的命名方式。
引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果是说 可以构成 静态代码块,那别人认为你还可以; 如果你说可以构成 静态内部类, 那别人认为你不错;如果你说了静态导包,
import与package机制相关,这里先从package入手,再讲述import以及static import的作用。
静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ;
静态成员归属 : 静态成员变量 是特殊的成员变量 , 是 类所有的 成员 , 而不是对象所有的成员 ;
详解:由于静态数据成员属于本类的所有对象共享,不属于特定类对象,因此在未产生类对象时作用域就可见,即:在未产生类的实例时,就可以对它进行操作。
1. 静态成员变量本质上是全局变量,哪怕一个对象都不存在,类的静态成员变量也存在;
全局变量前加上关键字static,全局变量就定义成一个全局静态变量.,全局静态变量存储在静态存储区,在整个程序运行期间一直存在。全局静态变量在程序运行之前就存在。
static 是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面的实例所示。
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:深入理解构造函数,介绍友元函数,内部类等等
平时我们在写类的时候,类中的成员变量,我们一般是通过对象名来访问public成员变量的,一般private(私有)的成员变量,对象是不能直接访问的;同时我们要明白每个对象的成员变量都是专属的,而且成员变量是不能在对象之间共享的,这就是专属性。下面我们来做一个小的程序需求来慢慢引出静态成员变量:
刷剑指offer第64题涉及到类内静态成员与方法的知识,有点模糊,找了两篇博客整理一下。
本文,在大文豪的static与C#中的static随笔基础上修改,增加了几个关键知识点 1、static 关键字简介 static是C#中经常使用的关键字之一,这个关键字常用于方法、字段、属性、事件、构造函数、类中,不能用于常量、索引器、析构函数,使用static关键字,必须知道下面几个知识点: (1)、静态方法的调用与非静态方法的调用方式 a、静态方法调用方式:类名.静态方法名 b、非静态方法调用方式:new 类().非静态方法 静态方法是属于类的,非静态方法是属于类实例(对象)的。 (2)、内存的初始化
静态成员是指成员变量和成员函数前加上关键字static。 静态成员分为:静态成员变量、静态成员函数; 静态成员变量: 所有对象共享同一份数据 在编译阶段分配内存 类内声明,类外初始化 静态成员函数: 所有对象共享同一个函数 静态成员函数只能访问静态成员变量 #include<iostream> using namespace std; class Person{ public: //类内声明,静态成员变量也是有访问权限的 static int m_a; static void fun
对于代码来说,许多函数并不需要对自己的内置成员函数做出修改,甚至一旦修改就会有不和逻辑的事情产生。而且对于C++来说用const修饰this指针,普通对象和const对象都能调用;(若普通对象调用该函数会产生权限缩小的现象产生,这种权限的缩小是我们所允许的)
关键字static的作用是什么 全局静态变量 在全局变量前加上关键字static,全局变量就定义成一个全局静态变量. 存储在内存中的位置:静态存储区,在整个程序运行期间一直存在。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化); 作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。 局部静态变量 在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。 内存中的位置:静态存储区 初始化:未经初始化的全局静态变量
#this指针 其作用就是指向成员函数所作用的对象 非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针 例如:想要将某对象的公有成员自增,写一个函数 complex addone(){ this->real++;// 等价于real++; this->print();//等价于print return *this; } 在主函数中: int main(){ complex c1(1,1),c2(0,0); c2=c1.addone(); //这样不需要再传递参数了 return 0; } *静态成员函数不能使用this指针,因为静态成员函数并不具体作用某个对象 *因此,静态成员函数的真实的参数的个数,就是程序中写出的参数个数 #静态成员函数 静态成员,在声明前面加上static关键字 普通对象每个成员都有各自的一份,静态成员变量被所有对象所共享 普通成员函数必须具体作用于某个对象,静态成员函数并不具体作用于某个对象 **因此静态成员不需要通过对象就可以访问** 访问静态成员 1.类名::成员名 2.对象名.成员名 3.指针->成员名 4.引用.成员名 静态成员变量本质上全局变量,静态成员函数本质上是全局函数 例如,考虑一个随时知道矩形总数和总面积的图形处理程序 可以用全局变量或者静态成员变量来表示,但考虑不同 结构体中定义中,将w,h定义长宽,当出现一个对象时候(**在构造函数里完成**),总数变量加1,面积变量也是增加 同理在**析构函数**里面将其对应的减少,值得注意的是不能忘记了复制构造函数 *在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数 #成员对象和封闭类 有成员对象的类叫做封闭类(在一个类里面有其他类(被称为成员对象),这个类叫封闭类) 任何生成封闭类对象的语句,都要让编译器明白,对象中的成员对象是如何初始化的 具体做法是:*通过封闭类的构造函数的初始化列表 *封闭类构造函数和析构函数的执行顺序 1.先执行所有对象成员的构造函数,然后执行封闭类的构造函数 2.对象成员的构造函数调用次序和对象成员在类中的说明次序一次 3.当封闭类的对象消亡时,先执行封闭类的析构函数,再执行成员对象的析构函数 #常量对象 常引用 如果不希望某个对象的值被改变,则定义该对象前可以加上const 可以在类的成员函数后面加上const关键字,则为常量成员函数 *常量成员函数执行期间不应修改其所作用的对象(成员对象,成员函数) 例如:void getvalue() const; //声明 注意*常量对象不能执行非常量成员函数,可以执行常量成员函数 #友元 友元分为友元函数和友元类两种 友元函数:一个类的友元函数可以访问该类的私有成员 声明:在前面加上frind 目的:为了保证某个类的函数能够访问其他类的私有成员 友元类:如果a时b的友元类,那么a的成员函数可以访问b的私有成员 *友元类之间的关系不能传递,不能继承
该文章介绍了static关键字在C++中的使用,主要包括static成员变量、static成员函数以及类/对象大小的计算。static成员变量是类的静态成员变量,可以通过类名直接访问,可以避免重复定义和静态链接库等问题。static成员函数是类的成员函数,可以在类外定义和实现,具有静态绑定和链接特点。类/对象大小的计算需要考虑类的成员变量和成员函数的存储空间,虚函数和虚继承等因素也会影响类的大小。
作者:wota 来源:http://www.cnblogs.com/miniwiki/archive/2011/03/25/1995615.html(点击文末阅读原文前往) 1 无继承情况下的Java初始化顺序: class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认
将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
static关键字可用于声明变量、函数、类数据成员和类函数。其主要影响着它们的生命周期、作用域和存储位置。
一些类对象可能会具有一些相同的属性,如果用普通数据成员来描述这些相同的属性,这意味着我们需要给每个对象的这个数据成员设定相同的值,如果改变类对象相同的属性,那么意味着我们需要对它们统一操作,这就有可能出现它们的值会不一样的情况,如果用全局变量来描述它们相同的属性,就会破坏类的独立性。
1、对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员或静态方法
我们在开发中会发现,有一些属性是所有对象所共有的,比如:学生总人数,链表头指针,尾指针等,这些数据成员没有必要和对象进行关联,它们更需要被所有对象所共享,而不是在每个对象中都对其重复进行操作。如果将其放在全局变量中,那么 C++ 的封装性将受到影响,静态成员案例见以下程序片段
使用new创建堆区数据,需要人为释放,new出来的东西是等到整个进程结束了才会自动释放。如果这个对象已经销毁,而这个类里没有析构函数却恰恰有个指针,自动释放的是栈区的变量,而不是堆区的,那么这个地址就没有指针指向它,就造成了内存泄漏。
在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值,以我们之前实现的Date类对象为例。
比如我们现在要设计一款战争游戏,在这款游戏中,分为多个兵种,每个兵种都有一定数量的士兵,游戏过程中,每隔一定时间每个兵种都会产生一定数量的士兵,由于战争的消耗,每个兵种的士兵都会减少。 为了使情节更逼真,引入了士气这个概念,当士气比较高的时候,这个兵种的战斗力就比较强,士气低的时候,这个兵种的战斗力就比较弱。 士兵的士气受很多因素影响,其中一个最直接的因素就是和这个兵种的数量直接相关,当这个兵种的士兵比较多,这个兵种的士气就比较高,战斗力就比较强。如果说当前的兵种士兵比较少,那么士气就比较弱,战斗力也比较弱。
C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态
一. 面向过程程序设计 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include <iostream.h> void fn(); static int n; //定义静态全局变量 void main() { n=20; cout<<n<<endl; fn(); } void fn() { n++; cout<<n<
一、类静态成员(static) 先介绍一下什么是静态变量、静态函数 静态局部变量:存在域(全局数据区),作用域(块作用域) 静态全局变量:存在域(全局数据区),作用域(整个文件) 静态函数:存在域(全局数据区),作用域(整个文件) static int a=10;//全局静态变量 static void add();//静态函数 int main() { { static int b=10;//局部静态变量 } } 特点: 静态static修饰的变量、函数,只需要初始化一
全局(静态)存储区:分为data段和bass段。data段(全局初始化区)存放初始化的全局变量和静态变量;bass段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中bass段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
本文介绍了静态数据成员和静态成员函数的概念、特点以及用法,并给出了一个示例代码。静态数据成员和静态成员函数是C++中比较重要的概念,在开发中经常用到。
PHP群里有人询问 self 关键字的用法,答案是比较明显的:静态成员函数内不能用 this 调用非成员函数,但可以用 self 调用静态成员函数/变量/常量;其他成员函数可以用 self 调用静态成员函数以及非静态成员函数。随着讨论的深入,发现 self 并没有那么简单。鉴于此,本文先对几个关键字做对比和区分,再总结 self 的用法。
总结:静态成员使用类名去调用,非静态成员使用对象名去调用。静态函数中只能访问静态成员,不允许访问实例成员 (静静),实例函数中既可以使用静态成员,也可以是实例成员。
封装(Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个全局变量和静态全局变量的例子,例如,在文件A中定义静态全局变量 i 和全局变量 j :
static void findMax(Student & st); //寻找最高成绩和学号
非常量静态成员的错误使用方法 静态成员只跟类有关,是所有对象共有的属性,如果在类中初始化则意味着每个对象都初始化一次,这样就需要非静态成员了。非常量静态成员函数不可以在类中初始化,一定要在类外把类名作为命名空间而初始化,但放在private里又只能在类里初始化,这种操作是无法实现的。但C++支持在类里定义非常量静态成员函数,如"static double average(){...};"。 误区二:在函数体内对非常量静态成员变量初始化。(xcode有提示)正确的方法是将初始化语句放到函数体外定义(在类中只有声明),然后在函数内以class::member的方式调用。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
大家好,又见面了,我是你们的朋友全栈君。static用来控制变量的存储方式和可见性 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配 空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个 问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想 到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的 缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此 函 数控制)。
函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但会破坏此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)。static 关键字则可以很好的解决这个问题。
static成员独立于类对象存在,也就是说它不属于对象的成员,它能被全体对象所共享。 统计·类类型对象创建的个数,用static成员来实现。 非static成员属于类对象,每个对象都有一份拷贝。 static成员函数没有this指针,他不能访问非static成员,也不能调用非static成员函数。
在C语言中曾经学习过静态变量, 其定义为经过static修饰过的变量, 其有着与整个源程序相同的生命周期, 其作用域与自动变量相同, 又分为静态全局变量和静态局部变量.
学习的过程就是填坑的过程,可不要偷懒想着跳过去,你现在跳过去,就相当于给自己挖了一个坑,你迟早会掉进去的,为了避免不掉坑,所以,努力填坑吧!
静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点: 1.静态数据成员的定义。 静态数据成员实际上是类域中的全局变量。所以,静态数据成员需要在类外定义(初始化),而不应该被放在类声明中。 原因是类声明中只是描述如果分配内存并不会真正的分配内存,而定义是一定要分配
this指针 this指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数类的指针 this指针无需定义可直接使用 用途: 1.当形参和成员变量相同时,可用this进行区分 2.在类的非静态成员中返回对象本身,可用return this
一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。 它们的根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。 例如: 1 class Sc 2 { 3 public: 4 void nsfn(int a); //像声明Sc::nsfn(Sc *this , int a); 5 static void sfn(int a); // 无this指针 6 //.... 7 }; 8 9 void f(Sc
因此:静态成员函数不能调用非静态成员,静态成员函数能调用静态成员,非静态方法里面能调用静态资源
领取专属 10元无门槛券
手把手带您无忧上云