您的位置:首页 > 编程语言 > C语言/C++

常对象及常成员及静态数据成员和静态成员函数的学习内容。

2016-05-19 17:09 351 查看
         常对象和常成员其实与常量的概念很接近,都是不可更改初始化值,但由于是在涉及到类,所以操作这些数据变得有点复杂,有很多需要注意的地方!

        因为这方面的内容涉及到指针,所以先在这里回顾以前所学的指向常量的指针和指针常量。

                   const   int     *p;                        //指向整型常量,指针值可改(可指向其它整形常量),但不可以修改指针指向对象的值。

                   int    * const   p;                       //指向整型量的常指针,可通过*p修改对象的值(指向对象为非常量的情况),但指针值不可修改。

                                                                    //所以一般定义常指针时便进行初始化,int   *const  p=&a;

                 指向常量的指针和指针常量还有常量其实挺好理解的,但接下来写的常对象和常成员相比就复杂得许多。

                  (在这之前先补充下指向对象的指针定义形式: Student   *pt=&stud1;)

        ① 常对象定义的一般形式:

                                                             类名  const  对象名 (实参列表);

                                                            const     类名     对象名 (实参列表);          //二者等价。

            常对象的性质:常对象里的所有数据成员都不可修改值(除了在类中已经声明了为可变量的数据成员),且只能通过类中常函数访问

       ②常数据成员定义的一般形式:

                                                              数据类型   const   常量名;

                                                              const     数据类型   常量名;                   //二者等价。

          常数据成员的性质:     

                                                               其值不可以被赋值,只能在调用对象时运行构造函数是用初始化的方式进行初始化赋值(只能用:类名  ::类名(形参列表):常量名(),.............{}这种方式进行初始化)。可以被const函数和非const函数引用。

     

       ③常成员函数定义的一般形式:

                                                              数据类型    函数名() const;     //const的位置在括号后面。

                                                              并且在类体外定义函数时也要在后面加const。

          常成员函数的性质:

                                                    可以访问同类中的常数据成员和非常数据成员,还有常对象的数据成员,但不可以改变其值。

       ④静态数据成员定义的一般形式:

                                                                  static   数据类型  变量名;

          静态数据成员的初始化:

                                                       静态数据成员只允许在类外进行初始化,形式为:    数据类型  类名::静态数据成员名=初值;

          静态数据成员的性质:

                                                       静态数据的值是可变的,并且让同类对象共用,静态数据存储不在对象中,单独开辟的空间,方便同类对象共用,

          静态数据成员的引用:

                                                       可通过类名和对象名进行引用,形如:cout<<a.height;  cout<<Box::height;   //假设height已经声明为静态数据成员。两种引用方式等价。

      ⑤静态成员函数定义的一般形式:

                                                                   在类中声明:     static  数据类型  函数名();

                                                                   在类外定义时只需用一般形式,不必加sconst。

          静态成员函数的性质:

                                                      静态成员函数是类的一部分,不存储在对象中,但可以同过类名和对象名调用函数,且在静态成员函数可以直接引用同类中的静态数据成员,

                                                      不用加类名或者对象名,但应为静态成员函数没有this指针,所以引用非静态数据成员时需要加对象名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 对象