Class
- 需要包含一个头文件;
- class的名称被视为一个类型,就像int、double一样;
- 每个class会提供一组操作函数,作用于对象上;
- 一般class由两部分组成:
public操作函数和运算符+private实现细节。
- 这些操作函数和运算符称为class的成员函数,代表这个class的公开接口;身为class的用户,只能访问其公开接口;
- private实现细节可以由成员函数的定义以及与此class相关的任何数据组成。
实现一个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文件中;文章来源:https://uudwc.com/A/ed4oN
-
非inline函数应该放在和class同名的.cpp文件中。文章来源地址https://uudwc.com/A/ed4oN
//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;
}