博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于static修饰符
阅读量:7286 次
发布时间:2019-06-30

本文共 1406 字,大约阅读时间需要 4 分钟。

一、类的 static 数据成员

1. 类的 static 数据成员必须在类外部进行初始化

            class Test

            {
              public:

                      ... ...

             private:

                     static int ival;

             };

             int Test::ival=0;                         //必须初始化,否则编译出错!

2. static 数据成员的类型可以是该成员所属的类类型。而非static数据成员被限定声明为其自身类对象的指针或引用。

             class Test

            {
            public:

                       ... ...

            private:

                      static Test stobj;               //正确。static数据成员stobj的类型可以为Test类型

                      Test *ptobj;                      //正确。非static数据成员ptobj的类型为Test*指针
                       Test &robj;                        //正确。非static数据成员robj的类型为Test&引用
                       Test tobj;                         //错误。非static数据成员tobj的类型不能为Test类型

            };

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

           class Test

           {
           public:

                    ... ...

                    void SetId ( int id = total );
                    ... ...

           private:

                    static int total;

            };

二、类的 static 成员函数

1. 静态成员函数不允许使用修饰符(如const)。因为static成员不是任何对象的组成部分,将成员函数声明为const就是承诺不会修改该函数所属的对象。

           class Test

           {
           public:

                     Test() { ++m_total; }

                     static int GetTotalNum() const { return m_total; }        //编译出错:“error C2272: “GetTotalNum”: 静态成员函数上不允许修饰符”
                     ~Test() { --m_total; }
                     ... ...

            private:

                    static int m_total;

           };

           int Test::m_total=0;

2. 类的 static 成员函数不能被声明为虚函数

            class Test

           {
           public:

                    ... ...

                   virtual static int BeginNo();                   //错误!

            private:

                     ... ...

           };

3. 类的 static 成员函数不允许访问非 static 成员(数据成员或成员函数)

           class Test

           {
           public:

                    ... ...

                    int GetCurNum() { return m_num; }
                     static int GetTotalNum();
                     ... ...

           private:

                    int m_num;

                    static int m_total;

            };

           int Test::m_total=0;

           int Test::GetTotalNum()

           {

                    GetCurNum();                 //错误!GetCurNum()是非static成员函数

                    ++m_num;                      //错误!m_num是非static数据成员

            }

转载于:https://www.cnblogs.com/zhangjing0502/archive/2012/02/28/2371221.html

你可能感兴趣的文章
Centos7 安装JDK
查看>>
浅谈个人安全意识
查看>>
基于底层事件的录制回放实现
查看>>
ethos从入门到精通-4.1映泰主板bios设置
查看>>
js 去除字符串空白符
查看>>
我的友情链接
查看>>
UC浏览器QQ浏览器欧朋浏览器使用体会
查看>>
Tcmalloc优化Nginx内存管理
查看>>
Spring那些不得不知的细节
查看>>
java获取本机ip,mac,os名称,版本等
查看>>
P2077 红绿灯
查看>>
我的友情链接
查看>>
jsp中的回车事件
查看>>
Linux php 扩展安装 mongo ,redis ,soap,imap,pdo_mysql,o
查看>>
Tee(Linux命令)
查看>>
android.widget.Spinner
查看>>
LAMP下tomcat使用命令
查看>>
ipvsadm 命令积累
查看>>
go的time
查看>>
SQL语句大全
查看>>