设为首页 加入收藏

TOP

C++类的静态成员实例讲解
2018-03-20 08:51:04 】 浏览:171
Tags:静态 成员 实例 讲解

定义类的静态成员,能够实现同类的多个对象之间数据共享,使用类的静态成员有如下的优点:

静态成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突;静态成员可以实施封装,可以是私有成员,而全局对象不可以;静态成员是与特定类相关联的,结构清晰。

class Employee{

    private:

        int maxlevel;

        int level;

    public:

        int c;

        static int count;

        static int Data(int i=0){ return i;}

};

int Employee::count = 0;

类的静态成员需要在 定义类之后,和使用这个类实例化对象之前,给这个类里的静态数据成员初始化,而且初始化的方式必须是在类外。

为什么呢?因为类的静态数据成员是属于类的,为所有的该类的对象所共享,所以必须在实例化对象之前就进行初始化,但是呢,却不可以在类体里初始化,因为,类的定义只是声明了一个种数据类型,并没有开辟内存空间,因此也无从初始化了。

同样的道理,类的非静态成员也不能在类体里初始化,因为类的非静态成员只有在类实例化某个对象之后,才开辟出内存空间供其使用。

下面我来看一下类的存储格式:

下面讲述静态数据成员的特点:

通常来说,类的非静态数据成员存在于该类类型的每个对象之中,静态数据成员则独立于该类的任何对象,在所有对象之外,单独开辟空间存储。在为对象所分配的空间中不包含静态成员所占的空间。

如果只声明了类而未定义对象,则类的非静态数据成员是不占存储空间的,只有在定义对象时,才为对象的数据成员分配空间。但是只要在类中定义了静态数据成员,即使不定义任何对象,也为静态数据成员分配空间,它可以在尚未定义对象时就被引用。

访问静态成员(静态数据成员、静态成员函数)时,同样需要遵守公有及私有访问规则。

静态数据成员必须在类外部定义,静态成员不能通过类的构造函数进行初始化的,而是在类外定义时进行初始化。

静态数据成员可用作默认实参,非静态数据成员不能用作默认实参,因为它的值不能独立于所属的对象而使用。

有了静态数据成员,各对象之间实现数据共享,因此可以不使用全局变量。

下面是一个关于静态成员函数的例子:

静态成员函数不能调用非静态数据成员,但可以调用静态数据成员;

而非静态成员函数既可调用非静态数据成员,又可调用静态数据成员。

静态成员函数可以用两种方式来调用,一种是:类名::静态成员函数,另一种是:该类的一个实例对象名 . 静态成员函数。

和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。

静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,而静态成员函数没有this指针。因此静态成员函数不能访问本类某个对象的非静态数据成员。 

或者也可以这样记:静态成员函数是专门为了访问静态数据成员的。

注意:静态成员函数不能被声明为const。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++学习笔记之调用构造函数和析构.. 下一篇C++中子类和父类之间的相互转化(..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目