您的位置:首页 > 编程语言

面向对象编程(OOP)--静态成员函数

2011-02-23 11:35 190 查看
一般情况下,成员函数(member function)必须通过类的某个对象来调用。这个对象会被绑定一以该成员函数(member function)的this指针上。通过存储于每个对象中的this指针,member function才能够存取该对象中的非静态数据成员(non-static data member)。

当一个函数在运行时,与类的任何对象都没有任何关联,同时它仍然是该类的一个成员函数时,我们可以声明其为静态成员函数(static member function)。注意,静态成员函数(static member function)只有在“不存取任何non-static members”的条件下才能够被声明为static,声明方式是在声明式之前加上关键词static:

class CNameVec
{
public:
CNameVec(){};

// 声明一个静态成员函数
static void display();

// 非静态数据成员
static vector<string> nameVec;
};


在类定义之外对静态成员函数进行定义时,不需重复加上关键词static:

// 在程序外部对静态成员函数(static member function)
// 定义时,不需要重复加上关键词static
void CNameVec::display()
{
for_each(CNameVec::nameVec.begin(), CNameVec::nameVec.end(), displayString);
}


接下来,我们将用一个例子来说明我们如何使用该静态成员函数:

#include <algorithm>
#include <string>
#include <vector>
#include <iostream>
using namespace std;

class CNameVec { public: CNameVec(){}; // 声明一个静态成员函数 static void display(); // 非静态数据成员 static vector<string> nameVec; };

vector<string> CNameVec::nameVec;
//
void displayString(string s)
{
cout << s << ' ';
}

// 在程序外部对静态成员函数(static member function) // 定义时,不需要重复加上关键词static void CNameVec::display() { for_each(CNameVec::nameVec.begin(), CNameVec::nameVec.end(), displayString); }
int main()
{
CNameVec::nameVec.push_back("Chuck");
CNameVec::nameVec.push_back("Nate");
CNameVec::nameVec.push_back("Dan");
CNameVec::nameVec.push_back("Blair");
CNameVec::nameVec.push_back("Serina");
CNameVec::nameVec.push_back("Georgina");
CNameVec::display();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: