知识点

类静态数据成员
类静态成员函数 一、类静态数据成员
静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一课里,我们主要讨论用类的静态成员来实现对象间的数据的共享。
静态数据成员的使用方法和注意事项如下:  
、静态数据成员在定义或说明时前面加关键字static。 
、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:   
 <数据类型><类名>::<静态数据成员名>=<值>
、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。  
、引用静态数据成员时,采用如下格式:  
 <类名>::<静态成员名> 二、类静态成员函数
静态成员函数内不能使用非静态类成员数据。
类成员函数可以独立使用。
可以使用类名+作用域解析符调用静态成员函数。如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=; //类静态成员初始化
void Tdate::setData(int y,int m,int d)
{
year=y;
month=m;
day=d; }
void Tdate::printdate() const
{ printf("%d:%d:%d\n",Tdate::year,Tdate::month,Tdate::day);
}
//默认构造函数
Tdate::Tdate()
{
//初始化代码 count++;//计数
printf("进入默认构造函数\n");
//Tdate::year=1990;
this->year=;
this->month=;
this->day=;
printf("this=%x \n",this); }
Tdate::Tdate(char*s)
{ count++;//计数
printf("%s",s);
year=;
month=;
day=;
}
//构造函数
Tdate::Tdate(int year,int month,int day)
{
//初始化代码
count++;//计数
printf("进入构造函数\n");
this->year=year;//y=y
this->month=month;
this->day=day;
printdate(); } int Tdate::fun()
{
return ;
} 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 ; } int _tmain(int argc, _TCHAR* argv[])
{
int b[]={,,};
// 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 \n", Tdate.count);
printf("%x,%x ,%x",&d1.count,&d2.count ,&Tdate::count);*/ getchar();
return ;
}

mfc 类静态成员的更多相关文章

  1. 回调函数中使用MFC类的成员或对话框控件的简单方法

    在MFC的很多程序中,常常需要在回调函数中调用MFC类的类成员变量.类成员函数,亦或者对话框控件的句柄.由于回调函数是基于C编程的Windows SDK的技术,而类成员又有this指针客观条件限制.. ...

  2. C++类静态成员变量和const常量的初始化方法

    C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...

  3. C++类静态数据成员与类静态成员函数

    from:://http://blog.csdn.net/taina2008/article/details/1684834 把类中的函数都定义成静态函数,这样相当于在编译时就分配了空间,这样不需要实 ...

  4. objectARX 关于MFC类向导 无法向此非CCmdTarget派生类添加任何命令 的解决方式

    objectARX 关于MFC类向导 无法向此非CCmdTarget派生类添加任何命令  的解决方式 图文By edata ,转载注明出处 http://www.cnblogs.com/edata 1 ...

  5. IE8与vs2005冲突 添加MFC类向导错误解决方法—— internet explorer脚本错误

    IE8 与 VS2005 冲突问题解决方法 问题表现为: MFC类向导添加类时,出现“当前页面的脚本发生错误”,进入MFC类向导后上方有一个小黄条“此网站的某个加载项运行失败.请检查"Int ...

  6. 《挑战30天C++入门极限》C++类静态数据成员与类静态成员函数

        C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? ...

  7. VS建立可供外部调用的MFC类DLL,C#调用MFC调用

    建立MFC DLL工程.一般选共享MFC库 关键是在你生成的CPP中,添加外部调用的接口 如下,意思是将这个函数对外公开. 如果你希望对外提供类,就把这个方法做成工厂. 如果你希望对外提供MFC的窗体 ...

  8. c++ 类静态成员、非静态成员初始化

    1.静态成员初始化(不能在构造函数或初始化列表中初始化) 1.1 所有静态成员都可以在类定义之外初始化(通用),如下所示 class test { public: static int a; }; ; ...

  9. MFC类的结构

    1. CObject类,MFC库中绝大部分类的基类,封装了MFC中的最基本机制. 运行时类信息机制/动态创建机制/序列化机制等... 2. CCmdtarget - 消息映射机制最基类 3. CWin ...

随机推荐

  1. windows zend_guard+apache no ssl+php no Thread Safe fastcgi模式 环境配置

    最近公司要做代码加密,就采用ZEND GUARD 方式加密代码 并进行显示 此文为总结,以备自己以后查看和给需要的同学们参考 采用的php为5.3版本  由于现在加密的更改, 能支持zend guar ...

  2. 第八章 SQL高级处理 8-1 窗口函数

    一.什么是窗口函数 窗口函数也称为LOAP函数.OnLine Analytical Processing的简称.意思是对数据库数据进行实时分析处理. 窗口函数就是为实现OLAP而添加的标准SQL功能. ...

  3. 安装Linux Centos系统硬盘分区方法

    一.硬盘回顾 无论是安装Windows还是Linux操作系统,硬盘分区都是整个系统安装过程中最为棘手的环节.硬盘一般分为IDE硬盘.SCSI硬盘和SATA硬盘三种,在Linux系统中,IDE接口的硬盘 ...

  4. The operation names in the portType match the method names in the SEI or Web service implementation class.

    The Endpoint validation failed to validate due to the following errors: :: Invalid Endpoint Interfac ...

  5. [SQL Server]SQL行转列

    SELECT * FROM (select ActionTargetType+actiontype as TypeResult, COUNT(RowGuid) as Number from BanJi ...

  6. Hadoop HBase概念学习系列之HBase里的时间戳(二十六)

    HBase集群要求每个节点的时间必须同步.HBase对于节点的时间扭曲(time skew)容忍度很低(这和HDFS是不一样的). 这主要是因为HBase需要使用系统时间来产生时间戳.如果系统时间不同 ...

  7. Scala编写的打印乘法口诀和金字塔

       刚开始接触scala,觉得语法简单,一时兴起就写了两个简单的例子 public class Calculate { public static void test1(){ for(int i=1 ...

  8. gamit安装

    需要准备的文件: 默认已安装好虚拟机和Ubuntu系统 1.输入用户名密码,进入Ubuntu10.04桌面.按下“Ctrl+Alt+T”,进入终端: 2.在终端输入“sudo gedit /etc/a ...

  9. 18年11月5日 NOIP模拟赛

    T1 题解 对于k=100的情况,贪心 对于100%的数据 可以发现,当前的决策只对后面的开采有影响,且剩余耐久度与之后的开采收益成正比,如果倒着考虑这个问题,得出i-n的星球1点耐久度所能获得的最大 ...

  10. ARC与Toll-Free Bridging

    arc模块与mrc模块的沟通. 相当于程序的混编处理. Toll-Free Briding保证了在程序中,可以方便和谐的使用Core Foundation类型的对象和Objective-C类型的对象. ...