static const、static、const成员

类的statci数据成员就是存在唯一拷的成员,不像其他成员那样在每个对象中都有一个拷贝。因此,
不需要特定的对象就可以访问static成员。当然如果statci是public性质的成员,也可以通过对象访问。
   static成员可以用于减少全局名字的数量,并且把这个变量的逻辑附属关系现定在某个类中,而且还
可以实现名字的访问控制,因此可以防止对全局名称空间的污染,使得同时使用多个库变得可能和更加安
全。
   static成员同时也可以是函数成员,他也是一个成员,所以他的作用域仍然属于类的作用域,访问控
制同样起作用。
   一个static成员声明仅仅只是一个声明,他所声明的数据成员或函数成员必须在某个地方有唯一的一

个定义。所以在定义时必须给出除了static修饰符之外的完全形式。如:


  class A{
  private:
   static int count;
  public:
   static void print(int p);
  };
  int A::count=0;
  void A::print(int p){/* ----*/}


而且,如果是数据成员,只能在类体外定义一次,不能再次赋值。如上例中,你不能再出现下列语句:
  A::count=1;//redefinition
  A::count(1);//redefinition:multiple initialization
如果你在类中声明了一个static const的数据成员,那么他的定义方法与static的成员一样。
如果const数据成员,const成员必须在一个对象被构造出来之前被初始化,所以,const数据成员应该在

构造函数的初始化列表中初始化。下面是一个简单的完整例子:

 //A.h
 #ifndef A_H_
 #define A_H_
 #include<iostream>
 class A{
 private:
  static int aa;//静态数据成员声明
  static const int count;//静态常数据成员声明
  const int bb;//常数据成员
 public:
  A(int a);
  static void print();//静态成员函数
 };
 A::A(int a):bb(a){//常成员的初始化
  aa+=1; 
 }
 void A::print(){
  std::cout<<"connt="<<count<<std::endl;
  std::cout<<"aa="<<aa<<std::endl;
 };
 int A::aa=0;//静态成员定义
 const int A::count=25;//静态常成员初始化
 #endif 
 //file main.cpp
 #include"A.h"
 #include<iostream>
 int main(){
  A a(10);
  A::print();//通过类访问静态成员函数
  a.print();//通过对象访问静态成员
  std::cin.get();
  return 0;
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值