C++之静态成员变量/函数以及成员指针

来源:互联网 发布:韩国代购淘宝店推荐 编辑:程序博客网 时间:2024/06/06 08:46

1.静态成员

  复习:
   static 修饰局部变量,生命周期变长,为整个程序,一般用于计数
   static 修饰全局变量,这个变量只能在当前文件中使用
   static 修饰函数,这个函数只能在当前文件中使用
   static 修饰的成员变量和函数,表示这个成员归整个类共有

   1.1 静态成员变量

       class 类名
       {
         static 数据类型 变量名;//声明
       };
      注意:(见代码09static.cpp)
       (1)静态成员变量必须在类的外部单独定义,因为他不会随着对象的创建而被定义

            数据类型  类名::变量名 = 初始值

       (2)静态成员变量的存储形式和全局变量一样,所不同的是静态成员变量受到类的作用域和访控属性的限定

       (3)非静态成员变量属于某个对象的,静态成员变量属于整个类,也就是在所有该类的对象间所共享既可以  通过类名也可以通过对象名去访问静态成员变量

       (4)对一个类进行sizeof计算时,不包含静态成员变量的大小

    当对于一个空类进行sizeof运算时,大小是 1;

     1.2 静态成员函数

       class 类名
       {
          static 返回值类型 函数名(形参名)
          {
          函数体;
          }
       };
       注意:
           (1)静态成员函数只能访问静态成员变量,受到类的作用域和访控属性的限制
           (2)非静态成员函数既可以访问非静态成员,也可以访问静态成员
           (3)静态成员函数中没有this指针,也就没有常属性
    练习:
         自定义一个类,要求这个类有且只能有一个对象;(见代码10static.cpp)

 2.成员指针

    如: class Student{  string m_name;}     (见代码 02memPtr.cpp)
   
    string Student::*pName = &Student::m_name; //1.定义一个成员变量指针指向成员变量m_name
    Student s1;
    s1.*pName = "wangfei";

   2.1指向成员变量的指针

          (1)定义形式
         成员变量的数据类型 类名::* 指针名;//指向的是这个类中的成员变量
      (2)赋值/初始化
         指针名 = &类名::成员变量名;
      (3)使用(解引用)

         对象名.成员变量名       =>   对象名.*指针名  

         对象指针->成员变量名   =>  对象指针->*指针名

  2.2 指向成员函数的指针

    (1) 定义形式
    函数的返回值类型(类名::*函数指针名) (形参表)
    (2) 赋值/初始化
    函数指针名 = &类名::函数名;
    (3) 使用(解引用)
    (对象.函数名)() => (对象.*函数指针名)()
    (对象指针->*函数指针名)();
   注意:
    定义指向静态成员函数指针时,不需要在指针名前面加"类名::"


  
0 0
原创粉丝点击