Chinaunix首页 | 论坛 | 博客
  • 博客访问: 340070
  • 博文数量: 73
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1293
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-07 11:17
个人简介

爱运动,爱看书,爱生活!

文章分类

全部博文(73)

文章存档

2014年(7)

2013年(66)

分类: C/C++

2013-07-28 13:15:14

1    在类中,非static成员属于类的每一个对象,static成员不一样,她独立于这个类的任意对象而存在,
        每个static成员是与类关联的对象,而不是与该类的对象关联。,正因为如此,static 成员没有this
        形参,她可以直接访问类的static成员,但不能直接使用非static成员。
2     通过代码说明一些问题
#include
#include
#include

using namespace std;

class Person{
private:
    char name[20];
    static int age;
    int sex;
public:
    Person( const char *n,int s){
strcpy( name,n );
sex = s;
    } 
    void print( ){
cout<<"name="<     }
};
/*stati成员需要在类外部定义和初始化,在类定义体外部引用类的static成员
*必须指定这个成员属于哪一个类,static关键字只能用于类定义体内部的声明
定义不能标为static
注意:这个规则的列外是,整型const static数据成员可以在类的定义体中初始化
但该数据成员仍然要在类定义体之外定义(只限于整型)
*/
int Person::age = 1; 


int main( )
{
    Person a( "ygf",0 );
    a.print( );
}
3    static成员函数不能声明为const,将成员函数声明为const就是保证不会修改该函数的对象,
    但static不是任何对象的组成部分。static成员函数不能声明为虚函数
4    使用类static成员的优点
        (1)static成员的名字是在类的定义体中,可以避免与外部的全局变量和其他类中的成员名字冲突
        (2)可以良好封装,static可以为私有成员,而其他对象不可以
        (3)能清晰看到static是与哪个类关联,便于理解程序员的意图
5    典型应用
    1 单列模式
#include
using namespace std;

class A{
private:
     int m_a;
     //声明静态对象a
     static A *a;
     A():m_a(20){}
public:
    //构造对象的函数也不应该依赖于对象,所以是静态成员函数
     static A*getInstance(){
          if(NULL==a){
            a = new A();
           }
     }
     void display()
     {
      cout<      }
};
//外部定义对象a
 A *A::a;

int main()
{
A *a=A::getInstance();
A *b=A::getInstance();
A *c=A::getInstance();
A *d=A::getInstance();


a->display();
b->display();
c->display();
d->display();
}
2 类中开启一个线程
    
阅读(2376) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

ygfinsight2013-07-29 15:38:18

bl竹子:const static数据成员,只有是整型常量时才可以在类内部定义

谢谢提醒,这个细节还真没注意,的确只有整型常量才可以在类内部定义。

回复 | 举报

bl竹子2013-07-29 14:20:15

const static数据成员,只有是整型常量时才可以在类内部定义