首页 > 代码库 > 《Essential C++》读书笔记 之 基于对象编程风格

《Essential C++》读书笔记 之 基于对象编程风格

《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 };
View Code

以下是如何定义并使用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 }
View Code

所有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。