C++中的静态函数

C++中的静态函数一些有关C++中静态函数的东西以下内容大部分从网上找来这篇文章属于介绍的比较基础的东西http://leonguan.spaces.live.com/blog/cns!63d2328323edf129!162.entry静态的成员函数,同静态数据成员类似,它也是属于类,而不是属于某一个对象的。静态成员函数不能访问非静态的数据成员,它只能访问静态数据成员,也只能调用其它的静态

一些有关C++中静态函数的东西

以下内容大部分从网上找来

这篇文章属于介绍的比较基础的东西

http://leonguan.spaces.live.com/blog/cns!63d2328323edf129!162.entry

静态的成员函数,同静态数据成员类似,它也是属于类,而不是属于某一个对象的。
静态成员函数不能访问非静态的数据成员,它只能访问静态数据成员,也只能调用其它的静态成员函数。原因是:当前对象的地址(this)是被隐含地传递到被调用的函数的。但一个静态成员函数没有this指针,所以它无法访问非静态的成员函数。

由于静态成员函数是属于类的,所以,静态成员函数的调用方法为:
  类名::静态成员函数名();
但也允许用对象或指向对象的指针调用。例如,在main()中,静态成员函数f分别被对象x和指向x对象的指针pX调用。

下面是一个应用静态数据成员和静态成员函数的例子:

在此程序中,我们将使用类 Count,它为自己的每一个对象提供了对象 ID 号。创建或销毁对象时,将有一静态数据成员记录程序中的对象数。执行结果是显示对象 ID 及对象数。

#include<iostream.h>
class Count{
private:
    static int counter;
    int obj_id;
public:
    Count(); //constructor
    static void display_total(); //static function
    void display();
    ~Count(); //destructor
};
int Count::counter; //definition of static data member
Count::Count() //constructor
{
counter++;
obj_id = counter;
}
Count::~Count() //destructor
{
counter–;
cout<<“Object number “<<obj_id<<” being destroyed\n”;
}
void Count::display_total() //static function
{
cout <<“Number of objects created is = “<<counter<<endl;
}
void Count::display()
{
cout << “Object ID is “<<obj_id<<endl;
}
void main()
{
Count a1;
Count::display_total();
Count a2, a3;
Count::display_total();
a1.display();
a2.display();
a3.display();
}

输出:
Number of objects created is = 1
Number of objects created is = 3
Object ID is 1
Object ID is 2
Object ID is 3
Object number 3 being destroyed
Object number 2 being destroyed
Object number 1 being destroyed

此程序中,类 Count 中有一静态数据成员 counter。每次创建对象时由构造函数为此数据成员加 1。每次销毁对象时由析构函数减 1。

在 main() 中,创建对象 a1 后,我们用静态成员函数 display_total() 来显示对象的总数。调用静态成员函数所用的语法,与我们调用一般成员函数所使用的方法有所不同。仅使用类名称调用函数 display_total() ,如下所示。

Count::display_total();

静态函数 display_total() 显示已创建的对象数。当我们执行与整个类相关的某个函数时,不需要引用特定的对象。因此,我们不使用特定对象的名称,而是与带有作用域运算符的类本身的名称一起使用静态函数。在进一步定义两个类对象 a2 和 a3 后,该函数再次被调用。

成员函数 display() 输出每一对象的对象 ID 号。在构造函数中,每次创建对象时,静态变量 counter 的值被赋给数据成员 object_id。因此,每一对象具有唯一编号。这显示在输出中,如下所示:

Object ID is 1
Object ID is 2
Object ID is 3

程序执行完成后,每一对象均被销毁。您会看到,具有 ID 3 的对象首先被销毁。销毁的原则就是,最后创建的对象最先销毁。

Object number 3 being destroyed
Object number 2 being destroyed
Object number 1 being destroyed

这篇文章介绍了静态成员函数访问成员变量的若干问题,有些方法还是很精辟的

http://shellman.blog.sohu.com/98359969.html

其实我觉得还可以将静态函数定义为带参数的,讲需要用到的成员变量作为静态函数的参数传入静态函数就好了。

ps:   以下关于静态成员变量

初始化static成员变量不能安排在类的构造函数中,因为构造函数可能一再被调用,而变量的初值却只应该设定一次。也不要把初始化安排在头文件中,因为它可能会被包含在许多地方。而应该放在main函数之中,或全域函数中,或者任何函数之外。

初始化时候 [类型名] [类名]::[变量名] 例如:int Base::a ;

当静态成员变量被声明为private类型时,不能用类名::变量名 为静态成员变量赋值。

当声明为public 则可以.

 

另一个应该注意的地方:对静态函数的声明,只需在头文件中声明为static,不需要在cpp文件的函数前面再加static

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/28180.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注