首页 > 编程 > C++ > 正文

c++类的static成员介绍

2019-11-06 06:58:35
字体:
来源:转载
供稿:网友

    最近进入了新一轮的迭代开发,每天基本上都在赶项目,而且还强制加班到8点,搞的自己学习的时间都没有了,而且把自己的学习计划都打乱了。现在基本上每天晚上回来看一个小时左右的视频教学就到十一二点,笔记也是一团乱麻,已经好久没有更新过了,先把今天学习的内容笔记一下,等这次迭代开发结束后,在整理整理以前的笔记。

static成员

对于特定类型的全体对象而言,有时候可能需要访问一个全局变量。比如统计某种类型对象已创建的数量。如果使用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,这是我们可以使用类的静态成员来解决这个问题,。非static数据成员存在于类类型的每个对象中,static数据成员独立该类的任意对象存在,它是与类关联的对象,不与类对象共享。

优点:

static成员的名字在类的作用域中,因此可以避免与其他类成员或全局对象名字冲突可以实施封装,static成员可以是私有的,而全局对象不可以。阅读程序容易看出static成员与某个类相关联,这种可见性可以清晰的反应程序员的意图。

static成员的定义

static成员需要在类定义体外进行初始化与定义特殊的整形static const成员整形的static const成员可以在类定义体内进行初始化,在任然需要在类定义体外进行定义(错误,也可以不进行定义性声明,前提是static cast被初始化)。countedobject.h#PRagma onceclass CountedObject{public:  CountedObject(void); ~CountedObject(void); static int GetCount();private: static int count_; //静态成员的引用性声明,还需有定义性声明};countedobject.cpp#include "CountedObject.h"int CountedObject::count_ = 0; //静态成员的定义性声明CountedObject::CountedObject(void){ count_++;}CountedObject::~CountedObject(void){ count_--;}int CountedObject::GetCount(){ return count_;}01cpp:#include "CountedObject.h"#include <iostream>using namespace std;int main(void){ //cout <<CountedObject::count_<<endl; cout<<CountedObject::GetCount()<<endl; CountedObject co1; //cout <<CountedObject::count_<<endl; cout<<CountedObject::GetCount()<<endl; CountedObject *co2 = new CountedObject; //cout <<CountedObject::count_<<endl; cout<<CountedObject::GetCount()<<endl; delete co2; //cout <<CountedObject::count_<<endl; cout<<CountedObject::GetCount()<<endl; return 0;}02cpp:#include <iostream>using namespace std;class Test{public: Test() { } ~Test() { } static const int x_;//static const引用性声明};const int Test::x_=100;int main(void){ cout<<Test::x_<<endl; return 0;}static成员函数static成员函数没有this指针非静态成员函数可以访问静态成员静态成员函数不可以访问非静态成员03cpp:#include <iostream>using namespace std;class Test{public: Test(int y):y_(y) { } ~Test() { } void TestFun() {  cout << x_ << endl;//OK,非静态成员函数可以访问静态成员  TestStaticFun(); } static void TestStaticFun() {  //cout << y_ << endl;//error,静态成员函数不能访问非静态成员  //TestFunc();//error,静态成员函数不能调用非静态成员函数 } static const int x_=100;//static const引用性声明 int y_;};//const int Test::x_=100;int main(void){ cout<<Test::x_<<endl; Test t(12); t.TestFun(); return 0;}

类对象大小的计算

类大小计算遵循结构体对齐原则类大小与数据成员有关与成员函数无关类大小与静态数据无关虚函数对类的大小的影响(后续)虚继承对类的大小的影响(后续)
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选