注册 登录
编程论坛 C++教室

类的静态成员?

newyj 发布于 2008-03-08 14:42, 1313 次点击
类的静态成员 中的 静态数据成员 和 静态成员函数  都是怎么用啊 (看书上的有点晕了)
还请 指教 谢谢了  最好 能 举例说明一下
9 回复
#2
tszhao2008-03-08 15:11
给你举个例子吧!
#include <iostream>
using namespace std;
class time
{
public:
    time(int,int);
    static int hour;    //hour是一个静态数据成员。它的初始化只能在类外进行初始化。
    int minute;
    int second;
    void display();
};
time::time(int m,int s):minute(m),second(s){};
int time::hour=15;
void time::display()
{
    cout<<hour<<":"<<minute<<":"<<second<<endl;
}
int main()
{
    time t1(06,20),t2(10,30);
    cout<<t1.hour<<endl;     //通过对象引用静态数据成员。
    cout<<t2.hour<<endl;     //同上。
    cout<<time::hour<<endl;  //通过类名引用静态数据成员。
    t1.display();
    t2.display();
    return 0;
}


//静态数据成员不属于对象,只是属于类,不随对象的建立而建立,也不随对象的撤销而释放内存空间。自己独立开辟一块空间,为每个类对象所共同拥有。
#3
sunkaidong2008-03-08 15:22
对于公有静态成员用类名或对象名访问都是一样的,私有的要用函数访问...
非静态成员函数可以访问静态变量和函数..但是静态函数却只能访问静态得,或访问实例对象
#4
newyj2008-03-08 20:15
谢谢  楼上的两位的回答
把静态数据成员声明为私有时 怎么来调用 通过对象引用静态数据成员 还是 通过类名引用静态数据成员?
再有就是 声明为静态的数据成员和静态的成员函数 与 非静态的 有什么去别
再次谢谢了
#5
sunkaidong2008-03-08 20:38
私有的时候可以通过成员函数来访问(使用前要初始化)。。。对象和类名都可以引用静态数据成员

#include <iostream>
using namespace std;
class time
{
private:
    static int hour;  
public:
    time(int,int);
    int minute;
    int second;
    void display();
};
time::time(int m,int s):minute(m),second(s){};
int time::hour=15;
void time::display()
{
    cout<<hour<<":"<<minute<<":"<<second<<endl;
}
int main()
{
    time t1(06,20),t2(10,30);
    //cout<<t1.hour<<endl;     //通过对象引用静态数据成员。
    //cout<<t2.hour<<endl;     //同上。
    //cout<<time::hour<<endl;  //通过类名引用静态数据成员。
    t1.display();
    t2.display();
    return 0;
}
静态的函数可以用来控制private得类型的构造函数实例。。
#include <iostream>
using namespace std;
class time
{
private:
    static int hour;
    time(int,int);
public:
    static time* a(int,int);
    int minute;
    int second;
    void display();
};
time::time(int m,int s):minute(m),second(s){};
int time::hour=15;
time*  time::a(int a1,int b1)
 {
    return new time(b1,b2);
}
void time::display()
{
    cout<<hour<<":"<<minute<<":"<<second<<endl;
}
int main()
{
    time *t1=time::a(100,100);
    t1->display();
    return 0;
}

[[it] 本帖最后由 sunkaidong 于 2008-3-8 20:54 编辑 [/it]]
#6
newyj2008-03-09 10:31
谢谢 楼上的耐心回答
是不是 静态函数 只能用来 控制 构造函数 和 静态数据成员
#7
sunkaidong2008-03-09 10:49
静态函数还可以用来访问实例对象...可以这样理解静态函数可以访问在内存里面已经分配空间的所有成员..如静态成员,静态函数,还有实例的对象.
#8
newyj2008-03-09 11:16
谢谢了啊
1