• mfc 类静态成员


    知识点
      
    类静态数据成员
    类静态成员函数
    
     
    一、类静态数据成员
         静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一课里,我们主要讨论用类的静态成员来实现对象间的数据的共享。
    静态数据成员的使用方法和注意事项如下:  
    1、静态数据成员在定义或说明时前面加关键字static。 
    2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:   
     <数据类型><类名>::<静态数据成员名>=<值>    
    3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。  
    4、引用静态数据成员时,采用如下格式:  
      <类名>::<静态成员名>
    
    二、类静态成员函数
        静态成员函数内不能使用非静态类成员数据。
        类成员函数可以独立使用。
        可以使用类名+作用域解析符调用静态成员函数。如Tdate::staticFun();
        最好把成员函数的实现放在.cpp里边,以防止重复定义。

    头文件

    class Tdate
    {
    private:
         int test;
         int fun();
    public:
        int year;//
        int month;//
        int day;//
        void setData(int y,int m,int d);
        void printdate()const;
        Tdate() ;//默认构造函数
        Tdate(char*s);
        Tdate(int y,int m,int d);
        int GetTest() const;
        void Tdate::setCount(int value);
        static void staticFun();
        
        //定义一个静态成员变量,用于存放类的实例化次数(对象个数)
        static int  count;
        void SetTest(int v)
        {
            test=v;
        }
        Tdate* GetThis()
        {
            return this;//返回对象地址
        }
        friend int tfun(Tdate d1);
    };
    
    inline int Tdate:: GetTest() const
    {
         
        return test;
    }

    类实现文件

    #include "stdafx.h"
    #include "date.h"
    
    int  Tdate::count=0; //类静态成员初始化
    void Tdate::setData(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;
    
    }
    void Tdate::printdate() const
    {
         
        printf("%d:%d:%d
    ",Tdate::year,Tdate::month,Tdate::day);
    }
    //默认构造函数
    Tdate::Tdate() 
    {
        //初始化代码
         
        count++;//计数
        printf("进入默认构造函数
    ");
        //Tdate::year=1990;
        this->year=1990;
        this->month=0;
        this->day=0;
        printf("this=%x 
    ",this);
    
    }
    Tdate::Tdate(char*s)
    {
         
        count++;//计数
      printf("%s",s);
      year=1990;
      month=0;
      day=0;
    }
    //构造函数
    Tdate::Tdate(int year,int month,int day)
    {
        //初始化代码
        count++;//计数
        printf("进入构造函数
    ");
        this->year=year;//y=y
        this->month=month;
        this->day=day;
        printdate();
    
    }
    
    int Tdate::fun()
    {
        return 1;
    }
    
    void Tdate::setCount(int value)
    {
        Tdate::count=value;
    }
    
    void Tdate::staticFun()
    
    {
        printf("%d",count);
    }

    类调用文件

    // helloc++.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <malloc.h>
    #include "date.h"
    
    int tfun(Tdate d1)
    {
         
        d1.fun();
        int r=d1.test;
        return 1;
    
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    { 
         int  b[3]={1,2,3};
        // Tdate a(1999,1,19);
          Tdate d1,d2;
         printf("%d",Tdate::count);
         Tdate::staticFun();
         d2.printdate();
        /* d2.setCount(7777);
         d1.setCount(888);
        
         printf("d2.count=%d 
    ", Tdate.count);
         printf("%x,%x ,%x",&d1.count,&d2.count ,&Tdate::count);*/
         
        getchar();
        return 0;
    }
  • 相关阅读:
    个人工作总结02
    个人工作总结01
    第七周学习进度条
    构建之法阅读笔记03
    第六周学习进度条
    团队开发介绍
    最大连通子数组的和
    四则运算-安卓版
    第五周学习进度条
    构建之法阅读笔记02
  • 原文地址:https://www.cnblogs.com/whzym111/p/6180192.html
Copyright © 2020-2023  润新知