《Essential C++》读书笔记 之 基于对象编程风格
2014-07-13
4.1 如何实现一个class
4.2 什么是Constructors(构造函数)和Destructors(析构函数)
4.3 何谓mutable(可变)和const(不变)
4.4 什么是this指针
4.5 Static Class Member(静态的类成员)
4.6 打造一个Iterator Class
4.7 合作关系必须建立在友谊的基础上
4.8 实现一个copy assignment operator
4.9 实现一个fuction object
4.10 将iostream运算符重载
4.11 指针:指向Class Member Functions
4.1 如何实现一个class
class定义由两部分组成:class的声明,以及紧接在声明之后的主体。主体部分由一对大括号括住,并以分号结尾。
主体内的两个关键词public和private。public members可以在程序的任何地方被取用,private members只能在member function或class friend内被取用。
以下是stack class的起始定义:
1 class Stack { 2 public: 3 bool push( const string& ); 4 bool pop( string &elem ); 5 bool peek( string &elem ); 6 7 bool empty(); 8 bool full(); 9 10 //size()定义于class本身内,其它members则仅仅只是声明 11 int size() { return _stack.size(); } 12 private: 13 vector<string> _stack; 14 };
以下是如何定义并使用Stack class object:
1 void fill_stack( Stack &stack, istream &is = cin ) 2 { 3 string str; 4 while ( is >> str && ! stack.full() ) 5 stack.push( str ); 6 7 cout << "Read in " << stack.size() << " elements\n"; 8 }
所有member function都必须在class主体内进行声明。至于是否要同时进行定义,可*决定义。
如果要在class主体内定义,这个member fuction会自动被视为inline函数。例如size()函数
如果要在class主体外定义,必须使用特殊语法,来分辨该函数究竟属于哪一个class。
对inline函数而言,定义于class主体内或主体外,并没有分别。class定义式及其inline member function通常会放在与class同名得头文件中。例如Stack class的定义和其empty()函数都放在Stack.h头文件中。
non-inline member functions应该在程序代码中定义,该文件通常和class同名,其后接着扩展名.c,.cc,.cpp。