29. 静态成员(成员变量和成员函数)

C语言中static功能: 隐藏/持久存储(函数之间存储的东西)
C语言中:全局变量、malloc 属于 持久存储的(函数之间都在的)

类的成员是static
(1). 隐藏功能
用private来控制C语言中的隐藏功能.
(2). 持久存储
C语言:全局变量、malloc属于持久存储(函数之间存储的东西)
C++语言:
2.1.何为C++的持久存储?
答: 第一种情况:对象与对象之间存在的东西,是持久存储的
第二种情况:一个类有不同的对象,但是不随对象不同而不同, 也是持久存

2.2.若成员是static, 则表示拥有了隐藏和持久存储功能.

#include <iostream>
class A
{
  public:
     A() { i =0; }
     //A():i(0) {}//i是静态成员,只能在定义的地方初始化.
     void print() { cout << i << endl; }
     void set(int i) { this->i = i; }
  private:
     static int i; //这个变量实际上在全局,但目前是声明,告诉某个地方有i,但是不知道在哪里,所以需要添加int A::i,否则链接错误.
};
int A::i; //一定要添加,否则程序链接错误 //定义变量i //程序运行成功
//static int A::i //程序出错
                  //表明只有在这个.cpp文件里访问,但是和类的静态成员访问属性违背,因为静态成员的可能被外部访问,不只在这个.cpp文件访问.
//int A::i = 20; //定义初始化,程序运行正确
int main()
{
  A a,b;
  a.set(10);
  b.print(); //10
  return 0;
} //编译出错
#include <iostream>
using namespace std;
class A
{
   public:
     A() {}
     void print() { cout << i << endl; }
     void set(int i) { this->i = i; }
     static int i;
};
int A::i = 20;
int main()
{
  A a,b;
  a.set(10);
  b.print();
  cout << a.i << endl;
  cout << A::i << endl;
  return 0;
}
#include <iostream>
using namespace std;
class A
{
   public:
     A() {}
     void print() { cout << i << endl; }
     void set(int i) { this->i = i; }
   private:
     static int i;
};
int A::i = 20;
int main()
{
  A a,b;
  a.set(10);
  b.print();
  //cout << a.i << endl; //这行肯定是不行的.
  //cout << A::i << endl; //还是会去检查i的属性,这行不行
  return 0;
}

静态成员函数

#include <iostream>
using namespace std;
class A
{
   public:
     A() {}
     void print() { cout << i << endl; }
     void set(int i) { this->i = i; }
     //static void say(int ii) { cout << ii << k << endl; } //这样是不行的,静态的函数只能调静态的函数,只能调静态的成员.
     //static void say(int ii) { cout << ii << this->i << endl;} //这样也是不行的,静态成员函数里没有this.
     //this是一个hidden,调用这个函数的那个对象.
   private:
     int k;
     static int i;
};
int A::i = 20;
int main()
{
  A a,b;
  a.set(10);
  b.print();
  a.say(0);
  A::say(0);
  cout << A::i << endl;
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值