- 这些操作函数和运算符称为class的成员函数,代表这个class的公开接口;身为class的用户,只能访问其公开接口;
- private实现细节可以由成员函数的定义以及与此class相关的任何数据组成。
从实现一个 栈(stack)开始:
栈允许存放许多数值,并以后进先出的顺序取出:
以pushing 方式存入数值,以popping方式取出最后一个被pushed的数值。
class Stack {
public:
//public接口
//public可被程序任何地方访问
private:
//private的实现部分
//private只能被class内部或class friend访问
};
//定义如下
class Stack
{
public:
bool push(const string&);
bool pop(string &elem);
bool peek(string &elem);
bool empty();
bool full();
int size() { return _stack.size();}
private:
vector<string> _stack;
};
所有成员函数都要在class内声明,会自动被视为inline函数;
而在class外定义成员函数时,必须用特殊的语法:
inline bool
Stack::empty() //::类作用域解析运算符
{
return _stack.empty();
}
bool Stack::pop(string &elem)
{
if(empty())
return false;
elem = _stack.back();
_stack.pop_back();
return true;
}
inline函数和class定义都放在对应的.h文件中;
非inline函数应该放在和class同名的.cpp文件中。
//Stack member function的定义
inline bool Stack::full()
{
return _stack.size() == _stack.max_size();
}
bool Stack::peek(string &elem)
{
if(empty())
return false;
elem = _stack.back();
return true;
}
bool Stack::push(const string &elem)
{
if(full())
return false;
_stack.push_back(elem);
return true;
}