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