知识点

类静态数据成员
类静态成员函数 一、类静态数据成员
静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一课里,我们主要讨论用类的静态成员来实现对象间的数据的共享。
静态数据成员的使用方法和注意事项如下:  
、静态数据成员在定义或说明时前面加关键字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 ;
}

最新文章

  1. 从零开始,搭建博客系统MVC5+EF6搭建框架(3),添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController
  2. Spark相关下载
  3. 【转】安装mysql 出现:Fatal error: Can&#39;t open and lock privilege tables: Table &#39;mysql.user&#39; doesn&#39;t exist
  4. PHP入门part4
  5. MMS源码中异步处理简析
  6. Python 学习笔记01
  7. JS练习题 显示登入者相关好友
  8. [设计模式]NetworkManagementService中的观察者模式
  9. gulp解决RequireJS
  10. yui--datatable 行添加格式
  11. 西门子PLC学习笔记二-(工作记录)
  12. Nginx实现负载均衡&amp;Nginx缓存功能
  13. Java中instanceof关键字的用法
  14. 重磅!!!微软发布.NET Core 2.2
  15. vue中的 ref 和 $refs
  16. 关于ajax的与后台Controller的交互 后台拿不到值
  17. webpack学习--安装
  18. php单元测试
  19. 【题解】Luogu P2057 [SHOI2007]善意的投票
  20. Django 访问admin提示ViewDoesNotExist at /admin/

热门文章

  1. SQLSERVER2012里的扩展事件初尝试(上)
  2. Coroutine及其实现
  3. python相关知识/技巧文摘
  4. asp.net 一般处理程序实现网站验证码
  5. mysql常见问题总结
  6. 我的第一个springboot应用+maven依赖管理
  7. September 27th 2017 Week 39th Wednesday
  8. 【websocket-sharp】使用
  9. virtualbox+vagrant学习-2(command cli)-24-Aliases别名
  10. jQuery.fn.extend()