静态成员和静态成员函数

来源:互联网 发布:淘宝鹊桥佣金怎么赚 编辑:程序博客网 时间:2024/06/05 19:13

静态成员和静态成员函数

基本概念

普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。
静态成员对象不需要通过对象就能访问

class CRectangle{public:    CRectangle(int i,int j);    ~CRectangle();    static void printTotal();protected:private:    int w,h;    static int nTotalArea;    static int nTotalNumber;};CRectangle::CRectangle(int i,int j){    w=i;h=j;    nTotalNumber++;    nTotalArea+=w*h;}CRectangle::~CRectangle(){    nTotalNumber--;    nTotalArea=nTotalArea-w*h;}int CRectangle::nTotalArea=0;int CRectangle::nTotalNumber=0;void CRectangle::printTotal(){    cout<<nTotalNumber<<","<<nTotalArea<<endl;}int main(){    CRectangle c1(3,3),c2(2,2);    CRectangle::printTotal();    c1.printTotal();    return 0;}

输出:

这里写图片描述

相关注意事项

静态成员函数不能访问非静态成员变量
因为静态成员函数不是作用于对象,假设是访问非静态成员变量w,不知道是哪个对象的。
静态成员函数也不能访问非静态成员函数,因为非静态函数可以访问非静态成员,所以不可访问。


另需要考虑复制构造函数问题,
当参数为一个对象或者返回值为一个对象,异或直接构造初始化 class a(b);这些会导致生成临时变量,矩形数量会增多。

  • 解决办法–写一个复制构造函数
CRectangle::CRectangle(const CRectangle & a) {    w = a.w;    h = a.h;    nTotalNumber++; nTotalArea += w*h;}
0 0