知识点
类静态数据成员
类静态成员函数
一、类静态数据成员
静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一课里,我们主要讨论用类的静态成员来实现对象间的数据的共享。
静态数据成员的使用方法和注意事项如下:
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\n",Tdate::year,Tdate::month,Tdate::day);
}
//默认构造函数
Tdate::Tdate()
{
//初始化代码
count++;//计数
printf("进入默认构造函数\n");
//Tdate::year=1990;
this->year=1990;
this->month=0;
this->day=0;
printf("this=%x \n",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("进入构造函数\n");
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 \n", Tdate.count);
printf("%x,%x ,%x",&d1.count,&d2.count ,&Tdate::count);*/
getchar();
return 0;
}
原文链接: https://www.cnblogs.com/whzym111/p/6180192.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/245821
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!