行业知识
【C++】---static成员(附OJ题)
2026-11-07 23:48:09
来源:互联网转载
一、静态成员变量
1.���念:
声明为static的类成员称为类的静态成员,静态成员分为两种:
(1)static修饰的成员变量:静态成员变量
(2)static修饰的成员函数:静态成员函数
注意:静态成员变量一定要在:类外进行初始化
2.如何计算一个类里面定义了多少个对象?
#includeusing namespace std;class A{public:A(){++countA;}A(const A& n){++countA;}~A(){--countA;}// 静态成员函数 专门访问 静态成员变量static int GetCountA(){return countA;}private:static int countA;// 静态成员变量在类内 只是 声明! //这里的countA存在于静态区(全局域),它属于整个类的所有对象};int A::countA = 0; // (1)定义初始化:静态成员变量必须在类外,而且必须在 类 的后面!!! // (2)定义的时候,不加static!int main(){cout public:A()//构造函数{++_n;} A(const A& a)//拷贝构造函数{++_n;} //private:static int _n;//n存在于静态区,属于整个类,不属于某个对象}; int A::_n = 0; int main(){A a1;A a2;A(); //这三行访问的都是全局的_n,因此打印结果都一样 cout public:A()//构造函数{++_n;} A(const A& a)//拷贝构造函数{++_n;} //获取静态成员变量的值int getN(){return _n;} private:static int _n;//n存在于静态区,属于整个类,不属于某个对象}; int A::_n = 0; int main(){A a1;A a2; //这两行访问的都是全局的_n,因此打印结果都一样cout public:A(){++countA;}A(const A& n){++countA;}~A(){--countA;}// 静态成员函数 专门访问 静态成员变量static int GetCountA(){return countA;}private:static int countA;// 静态成员变量在类内 只是 声明! //这里的countA存在于静态区(全局域),它属于整个类的所有对象};int A::countA = 0; // (1)定义初始化:静态成员变量必须在类外,而且必须在 类 的后面!!! // (2)定义的时候,不加static!int main(){cout private: static int _i; static int _ret;public: Sum()// 用构造函数实现_i的自增和_ret的连续求和! { _ret+=_i; ++_i; } static int Get_ret() // 静态成员函数 专门获取 静态成员变量_ret { return _ret; }};int Sum::_i=1;int Sum::_ret=0;class Solution {public: int Sum_Solution(int n) { Sum arr[n]; // 调用了n次构造函数 return Sum::Get_ret(); }}; // class不写private 默认就是 私有 // Sum是Solution的内部类,可以访问Solution的私有 class Sum { public: Sum() { _ret+=_i; _i++; } // 因为Sum是Solution的友元,调用上面的默认构造函数时,我需要访问_ret和_i时,我可以直接访问solution的私有, // 所里这也不用,再定义一个静态函数。 //static int GetN() //{ // return _ret; //} };private: static int _i; static int _ret;public: int Sum_Solution(int n) { Sum arr[n];// 数组arr调用n次Sum类的构造函数! return _ret; }};int Solution::_i=1;int Solution::_ret=0;int year, month, day;int GetMonDay[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };while (cin year month day){int sum = 0;// 这里的循环 只加了当前的 整月份!(对day还没加上)for (int i = 0; i
上一篇:轻松下载GrabCar应用指南
下一篇:IIS快速跳转宝塔面板的实用指南