局部变量,实例变量和类变量的区别(local,instance,static)
(2012-12-20 23:17:54)
标签:
杂谈 |
分类: QT综合使用 |
这不是一篇很空泛的理论概念文章,而是有很强的实用性价值。具体的例子参见stanford编程方法handout中的variables。
局部变量local
variable是最好理解的概念。他们只存在于创建他们的block里({}之间)无法在block外进行任何操作(不能读取,赋值等等)。
实例变量instance
variable的生命周期要长一点。只要它所在的类还活着,他们就活着。
比如在class student中定义了public int ID_NO;在另一个函数中定义了一个新的student
class: stu。那么只要stu还在,stu中的ID_NO就存在。
为什么说是实例呢?因为对于不同的实例,同一个实例变量可以是不同的值。比如我们定义两个student
class,那么这两个class可以有两个不同的ID_NO;
这对于类变量(我更喜欢称之为静态变量)class variable or static
variable来说就不同了。如果你看到student.ID_NO(针对C++而言是student::ID_NO)那么这就肯定是一个静态变量,因为不允许对实例变量这样操作。
另外一点关于静态变量的特殊之处在于静态变量只有一个copy。比如在class A中定义了static int
x;
创建两个新的class:A a1; A a2;
再赋值a1.x =5; a2.x =7;
那么现在a1.x=a2.x=7;
静态变量的初始化也很奇特,初始化在类外进行:int A::x = 5;