面向对象编程(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:
在类定义之外对静态成员函数进行定义时,不需重复加上关键词static:
接下来,我们将用一个例子来说明我们如何使用该静态成员函数:
当一个函数在运行时,与类的任何对象都没有任何关联,同时它仍然是该类的一个成员函数时,我们可以声明其为静态成员函数(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;
}
相关文章推荐
- C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)
- MATLAB OOP记点东西2-成员函数访问成员变量(使用静态成员函数)
- C++中静态成员函数访问成员变量问题
- 静态成员函数生命期
- C++静态成员函数小结
- 实现类非静态成员函数做窗口过程函数
- 静态成员函数和普通成员函数的区别
- C++ static静态成员变量和静态成员函数
- 静态成员函数
- C++静态数据成员和静态成员函数
- c++中的静态成员函数和静态数据成员
- C++静态成员和静态成员函数
- 3-6 静态数据成员与静态成员函数
- C++静态成员函数小结(转)
- C++中的静态成员函数不能访问非静态成员
- 类的静态方法(函数)中为什么不能调用非静态成员(属性)?
- xcode中用静态成员函数来代替全局变量
- [C++学习笔记]--析构函数、静态成员变量、静态成员函数
- 静态成员(变量、函数)
- c++ 静态数据成员和静态成员函数