C++ static 以及类的大小

一、整体代码

       CountedObject.h

#ifndef _COUNTED_OBJECT_H_
#define _COUNTED_OBJECT_H_
class CountedObject
{
public:
    CountedObject();
    ~CountedObject();
public:
    static int GetCount();
private:
    static int count_;        // 静态成员的引用性声明
};
#endif // _COUNTED_OBJECT_H_

        CountedObject.cpp

#include "CountedObject.h"
int CountedObject::count_ = 0;        // 静态成员的定义性声明
CountedObject::CountedObject()
{
    ++count_;
}
CountedObject::~CountedObject()
{
    --count_;
}
int CountedObject::GetCount()
{
    return count_;
}

       01.cpp

#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;

}

      other.cpp

#include <iostream>
using namespace std;
class Test
{
public:
    Test(int y) : y_(y)
    {
    }
    ~Test()
    {
    }
    void TestFun()
    {
        cout<<"x="<<x_<<endl;    //OK,非静态成员函数可以访问静态成员
        TestStaticFun();
    }
    static void TestStaticFun()
    {
        cout<<"TestStaticFun ..."<<endl;
        //TestFun();        Error,静态成员函数不能调用非静态成员函数
        //cout<<"y="<<y_<<endl;        Error,静态成员函数不能访问非静态成员
    }
   
    static int x_;        // 静态成员的引用性说明
    int y_;
};
int Test::x_ = 100;        // 静态成员的定义性说明
int main(void)
{
    cout<<sizeof(Test)<<endl;
}


二、运行结果

        0  1   2   1

        4(int占4个字节)


三、解释

      1、静态变量被所有对象共享,没有对象时候就有静态的变量和方法。所以静态的函数不能调用非静态的变量和方法。反之,可以。
      2、先有静态成员的引用性声明,但不能赋值。然后在静态成员的定义性声明中赋值。
      3、static const int可以只在引用性声明中赋值。
      4、类大小计算遵循前面学过的结构体对齐原则
            类的大小与数据成员有关
            与成员函数无关 
           类的大小与静态数据成员无关
           虚函数对类的大小的影响
           虚继承对类的大小的影响
           空类长度为1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值