Static修饰的成员和内部类

静态成员:

一.定义:

        由static修饰的成员变量叫做静态成员变量,类似地,由static修饰的成员函数,就叫做静态成员函数

二.理解:
 三:个人关于知识点的领悟:

@静态变量只能在类外进行初始化,不能在定义的时候给缺省值,因为静态变量不走初始化列表初始化要用类型 类名::变量名 = n   这样的方式在类外面进行初始化

@静态的只能访问静态的,非静态的既可以访问静态的,也可以访问非静态的。这点跟java 中的类似。(因为静态函数中没有this指针,就不能访问非静态的变量和方法)

@静态成员属于类,但是不属于对象,这一点可以通过sizeof来验证

@突破类域就能访问静态成员,例如:类名::静态成员 或者 对象.静态成员

@静态变量虽然不属于对象,但是他受到类中的访问限制符的限制:public protect private

四.关于静态成员的应用:

例如以下的oj题中:叫求1到n的和,就可以用到静态的成员变量;

解法 :

class sum{
  private:
    static int _n;
    static int _result;
public:
    sum(){
        _n++;
        _result+= _n;
    }
    static int getresult(){
        return _result ;
    }
};
int sum:: _n =0;
int sum::_result = 0;


class Solution {
public:
    int Sum_Solution(int n) {
        sum a[n];
        return sum::getresult();
    }

};

解题思路:

1.创建一个sum类。然后定义两个静态的变量_n 和_result,然后对两个进行初始化,在构造方法中进行_n++和_result+=n;

2.创建sum a[n]对象数组,每创建一个对象就调用一次构造方法,就对静态的成员变量完成++,则创建n个对象就完成了1+2+3+........+n的操作

3.最后再返回得到的result就完成了这道题

内部类

一.定义:

   在一个类中定义一个类,就叫做内部类

二.理解:

@内部类是独立的,他跟外部的类没有太大的关系,他可以独立的创建自己的对象,即使外部的类没有实例化。

@内部类是外部类的友元类,但是外部类不是内部类的友元类,即是说内部类可以访问外部类的所有的成员,但是外部类不能直接访问内部类的成员,除非有特殊的接口。

@在下斗胆认为:内部类和外部类的关系有点像人与寄生虫的关系,寄生虫可以访问人体的各个东西,但是人却不能直接访问寄生虫的东西,除非有特殊的的接口。

@虽然他是的独立的,但是他受到外部类中的访问修饰符的限制

@作用域:内部类的作用域仅限于其外部类。在类外部,必须通过外部类的实例来引用内部类。

三.例子:

可以对上面的代码进行优化,采用内部类的方式:只需要将静态的变量的类域改变一下即可。


class Solution {
    class sum {
      private:
        static int _n;
        static int _result;
      public:
        sum() {
            _n++;
            _result += _n;
        }
        static int getresult() {
            return _result ;
        }
    };
  public:
    int Sum_Solution(int n) {
        sum a[n];
        return sum::getresult();
    }

};

int Solution::sum:: _n = 0;
int Solution::sum::_result = 0;

 道友,再会!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值