C++基础语法——类的静态成员(静态属性)

fu

1、静态数据成员

//用关键字static声明
//为该类的所有对象共享,具有静态生存期
//必须在类的外面定义和初始化,用“::”(作用域操作符)来指明所属的类

#include <iostream> 
using namespace std;

class Point {
    private:
        int x, y;
    public:
        Point(int x = 0, int y = 0) : x(x), y(y)  {}     //构造函数
        ~Point()  {}   //析构函数
        int getX()  {return x;}
        int getY()  {return y;}
};

//假设需要统计点的总个数,考虑添加一个数据成员count
class Point {
    private:
        int x, y;
        int count;
    public:
        Point(int x = 0, int y = 0) : x(x), y(y)  {}     //构造函数
        ~Point()  {}   //析构函数
        int getX()  {return x;}
        int getY()  {return y;}
        void addCoutn() {count++;}
        void showCount() {
             cout << "count = " << cout << endl;
        }
};
//同时创建了多个对象,要保证增加一个对象count就加一,还要保证所有对象同步count值。因此制定count为一个静态数据成员
class Point {
    private:
        int x, y;
        static int count; //静态数据成员声明
    public:
        Point(int x = 0, int y = 0) : x(x), y(y)  {}     //构造函数
        ~Point()  {}   //析构函数
        int getX()  {return x;}
        int getY()  {return y;}
        void addCoutn() {count++;}
        void showCount() {
             cout << "count = " << cout << endl;
        }
};

int Point :: count = 0; //静态数据成员必须在类的外面声明并初始化,并用作用域操作符来指明所属的类。
//局部静态变量的生存期域程序的运行时间相同
//count仍然是局部变量,可以看成是所有Point对象共享的一般变量。
//所以局部变量用于统计对象个数等类似的功能。

//举例

#include <iostream>
using namespace std;
class Point {
    private:
        int x, y;
        static int count; //静态数据成员声明
    public:
        Point(int x = 0, int y = 0) : x(x), y(y)  {
            count++;  //每次创建对象都会自动调用构造函数,总数加一
        }     //构造函数
        ~Point()  {
            count--;  //对象消退的时候会自动调用析构函数,总数减一
        }   //析构函数
        int getX()  {return x;}
        int getY()  {return y;}
        void addCoutn() {count++;}
        void showCount() {
             cout << "count = " << cout << endl;
        }
};

int Point :: count = 0;  //在类的外面进行定义和初始化

int main() {
    Point a(4, 5);  //定义对象a,自动调用构造函数,count+1
    cout << "Point a:" << a.getX() << "," << a.getY();
    a.showCount();

    Point b;
    cout << "Point b:" << b.getX << "," << b.getY();
    b.showCount();
    return 0;
}

2、静态成员函数

#include <iostream>
using namespace std;

class Point {
    private:
        int x, y;
        static int count;
    public:
        Point(int x = 0, int y = 0) : x(x), y(y) {
            count++;
        }
        Point(Point &p) {
            x = p.x;
            y = p.y;
            count++; //复制构造函数里面本来没有的,但是我们最好自己加上,因为调用这个函数时,系统会创建一个临时对象,所以要个数加一。当撤销时,又会调用析构函数把临时内存撤销掉,所以析构函数需要有一个个数减一
        }
        //这是一个复制构造函数。

        static void showCount() {
            cout << "Count:" << count << endl;
        }
};
调用时:Point :: showCount();
//静态函数中只能包含静态变量(存储在静态存储区),因为静态变量会在main函数之前就分配内存,此时对象还没有。而私有属性只在对象建立时分配内存。也就是说这个静态函数中不能有x或y
//复制构造函数
//1、定义一个对象时,以本类另一个对象作为初始值
Point a(10, 20) 
Point b = a;  //当这种语句出现时,会自动调用复制构造函数,用a来初始化b,比粗在创建b的同时赋值,不能分开写。

//2、传参
void fun1(Point p) {
    cout << p.getX() << endl;
}
//调用语句: fun1(b);

//3、函数值返回
Point fun2() {
    return Point(1, 2);
}
//调用语句: b = fun2();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值