读书人

浅谈static关键字lt;2gt

发布时间: 2013-03-06 16:20:31 作者: rapoo

浅谈static关键字<2>

上次我们分析了一下C语言中的static的特点极其作用,这次我们主要分析C++中的static特性。

C++面向对象的思想促使我们将那些具有共性或者具有为同一类对象进行操作的函数封装在一起,当然还有属性,也就是成员变量。

类中是有成员变量和成员函数的,static都可以修饰他们,修饰后的结果他们变成了静态成员变量,静态成员函数,但是他们与普通成员有什么区别呢?

#include <iostream>
using namespace std;
class Student
{
private:
char name[20];
int age;
public:
Student()
{

}
Student(char* name,int age):age(age){
strcpy(this->name,name);
}
void print()
{

//4
stuNum++;
IncNum();
cout<<name<<","<<age<<endl;
}
static int stuNum;
static void IncNum()
{
stuNum++;
//2age++;
//3print();
}
};

//1
int Student::stuNum=0;
int main(int argc,char* argv[])
{
Student stu("harold",22);
stu.print();
cout<<Student::stuNum<<endl;
Student::IncNum();
cout<<Student::stuNum<<endl;
stu.IncNum();
cout<<Student::stuNum<<endl;
cout<<stu.stuNum<<endl;
return 0;
}

通过这个程序让我们明白几点:

1.静态成员变量(注释1处)在类内声明,在类外要定义,定义的时候要加上类名::

2.静态成员函数可以直接在类内进行声明定义

3.静态成员变量和静态成员函数都是从属于整个类的,不单独属于某个对象(sizeof(对象)查看对象大小即可明白),但是被所有对象共享,对于静态成员的调用可以是

对象.成员的形式也可以是类名::成员的形式

4.静态成员函数不能访问非静态成员函数和非静态数据成员,注释2,3处的调用导致错误,但是可以访问静态成员变量

5.非静态成员函数可以访问静态成员函数和静态成员变量,注释4处可见。

读书人网 >编程

热点推荐