Essential C++ 笔记(4):基于对象的编程风格(上)

  这一章的目的是设计一个class。一般class由两部分组成:(1)一组公开的(private)操作函数和运算符;(2)一组私有的(private)实现细节。这些操作函数和运算符称为类的成员函数(member function)。

1、如何实现一个Class

  以stack为例,定义类先从所谓的抽象(abstraction)开始。本例栈中存放string类型。

  Class的声明,然后也可以用类指针(class pointer)来定义:

class Stack;// 类的声明
Stack *pt = 0; // 定义类指针
void process(const Stack&); // 以Stack作为数据类型

  接下来,需要定义Stack类的骨架本身:

class Stack{
   
public:
	// ...public的接口函数
private:
	// ...private的接口函数
};

  上面可以看到,Class的定义是由两部分组成的:(1)类的声明;(2)声明之后的主体。主体里面一般有两部分,其中public member可以在程序的任何地方访问,private member只能在类的内部或者是class friend中访问。下面是类的起始定义:

class Stack{
   
public:
	bool push(const string& );
	bool pop(string &elem );
	bool peek(string &elem);

	bool empty();
	bool full();

	//size()定义在class本身中,其余成员函数仅仅是声明。
	int size(){
   
		return _stack.size();
	}
private:
	vector<string> _stack;
};

  下面说明如何定义并使用类中的成员函数:

void fill_stack(Stack &stack, istream &is = Cin){
   
	string str;
	while(is >> str and !stack.full())
		stack.push(str);
	cout << "Read in " << stack.size() << "elements" << endl;
}

  所有的成员函数必须在类内声明但是否在类内定义可以自由决定。如果在类内定义,这个成员函数被视为内敛(inline)函数。如果子啊类的外部定义,必须在前面加上关键字inline

inline bool Stack::empty(){
   
	return _stack.empty();
}

inline bool Stack::pop(string &elem){
   
	if(empty())
		return false;
	elem = _stack.back();
	_stack.pop_back();
	return true;
}

  上面的Stack::empty()告诉编译器,函数是类内部的,并且两个冒号即所谓的类作用于解析(class scope resolution) 运算符。

  下面是class Stack中其余成员函数的定义。

inline bool Stack::full(){
   
	return _stack.size() == _stack.max_size();
}

inline bool Stack::peek(string &elem){
   
	if(empty())
		return false;
	elem = _stack
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值