Essential C++学习笔记及源代码(第4章 基于对象编程风格)

news/2024/7/4 1:10:09 标签: c++, 面向对象编程, class
class="baidu_pl">
class="article_content clearfix">
class="markdown_views prism-atom-one-light">

第4章介绍了C++语言中使用Class进行基于对象的编程的方式

导言:一般而言,class由两部分组成:一组公开的(public)操作函数和运算符,以及一组私有的(private)实现细节。这些操作函数和运算符称为class的成员函数,并代表这个class的公开接口。身为class的用户只能访问其公开接口。这也就是我们使用string、vector等标准模板库的方式。例如,针对string的成员函数size(),我们只知道其原型声明,即参数列表为void,返回一个整数值。

1、Class的private实现细节可由成员函数的定义以及与class相关的任何数据组成。例如,假设string类对象的size()每次被调用,都会重新计算其字符串长度,那么就不需要任何相关的数据来存储这份信息,size()定义中可能利用for循环之类的遍历方式取得字符串长度。但如果string类对象想存储其字符串长度,就必须在每个class对象中定义一个private的数据成员,并在size()定义中将该值返回。每当字符串长度有所变动,这份private数据成员就必须被更新。

2、Class用户通常不会关心此等实现细节。身为一个用户,我们只利用其公开接口来进行编程。这种情形下,只要接口没有更改,即使实现细节重新构造,所有的应用程序代码也无须变动。

3、这一章我们学习将从class的使用提升至class的设计与实现。这正是C++程序员的主要工作。

本章作者使用了一个Triangular类来模拟一个class的实现,并教导读者在实现一个class的过程中需注意的细节。当私有成员有pointer成员时必须重载复制构造函数和赋值运算符防止内存越界。在本章最后引出一个例子简要体现第5章class="tags" href="/tags/MianXiangDuiXiangBianCheng.html" title=面向对象编程>面向对象编程的含义。

附上笔者所写的课后练习答案。

//ch4_main.cpp

class="prism language-cpp">class="token macro property">#class="token directive keyword">include class="token string"><iostream>
class="token macro property">#class="token directive keyword">include class="token string"><string>
class="token macro property">#class="token directive keyword">include class="token string"><vector>
class="token macro property">#class="token directive keyword">include class="token string"><algorithm>
class="token keyword">using class="token keyword">namespace stdclass="token punctuation">;

class="token keyword">class class="token class-name">Triangular_iterator
class="token punctuation">{
class="token keyword">publicclass="token operator">:
    class="token function">Triangular_iteratorclass="token punctuation">(class="token keyword">int indexclass="token punctuation">) class="token operator">: class="token function">_indexclass="token punctuation">(index class="token operator">- class="token number">1class="token punctuation">) class="token punctuation">{class="token punctuation">} class="token comment">//构造函数初始化iterator;
    class="token keyword">bool class="token keyword">operatorclass="token operator">==class="token punctuation">(class="token keyword">const Triangular_iterator class="token operator">&class="token punctuation">) class="token keyword">constclass="token punctuation">;   class="token comment">//比较iterator是否相等;
    class="token keyword">bool class="token keyword">operatorclass="token operator">!=class="token punctuation">(class="token keyword">const Triangular_iterator class="token operator">&class="token punctuation">) class="token keyword">constclass="token punctuation">;   class="token comment">//比较iterator是否不相等;
    class="token keyword">int class="token keyword">operatorclass="token operator">*class="token punctuation">(class="token punctuation">) class="token keyword">constclass="token punctuation">;                                class="token comment">//指针解引用运算符;
    Triangular_iterator class="token operator">&class="token keyword">operatorclass="token operator">++class="token punctuation">(class="token punctuation">)class="token punctuation">;                    class="token comment">//前置自增运算符;
    Triangular_iterator class="token keyword">operatorclass="token operator">++class="token punctuation">(class="token keyword">intclass="token punctuation">)class="token punctuation">;                  class="token comment">//后置自增运算符;

class="token keyword">privateclass="token operator">:
    class="token keyword">void class="token function">check_integrityclass="token punctuation">(class="token punctuation">) class="token keyword">constclass="token punctuation">; class="token comment">//判断_index索引是否合法;
    class="token keyword">int _indexclass="token punctuation">;
class="token punctuation">}class="token punctuation">;

class="token keyword">class class="token class-name">Triangular
class="token punctuation">{
class="token keyword">publicclass="token operator">:
    class="token function">Triangularclass="token punctuation">(class="token keyword">int len class="token operator">= class="token number">1class="token punctuation">, class="token keyword">int bp class="token operator">= class="token number">1class="token punctuation">)class="token punctuation">;
    class="token function">Triangularclass="token punctuation">(class="token keyword">const Triangular class="token operator">&class="token punctuation">)class="token punctuation">;
    Triangular class="token operator">&class="token keyword">operatorclass="token operator">=class="token punctuation">(class="token keyword">const Triangular class="token operator">&rhsclass="token punctuation">)class="token punctuation">;
    class="token comment">//3个构造函数;

    class="token keyword">int class="token function">lengthclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _lengthclass="token punctuation">; class="token punctuation">}
    class="token keyword">int class="token function">beg_posclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _beg_posclass="token punctuation">; class="token punctuation">}
    class="token keyword">int class="token function">elemclass="token punctuation">(class="token keyword">int posclass="token punctuation">) class="token keyword">constclass="token punctuation">;
    class="token comment">//获取vector长度, 起始位置, pos位置的元素值;

    class="token keyword">void class="token function">lengthclass="token punctuation">(class="token keyword">int nlenclass="token punctuation">) class="token punctuation">{ _length class="token operator">= nlenclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">beg_posclass="token punctuation">(class="token keyword">int nposclass="token punctuation">) class="token punctuation">{ _beg_pos class="token operator">= nposclass="token punctuation">; class="token punctuation">}
    class="token comment">//更改Triangular的长度大小和起始位置;

    class="token keyword">bool class="token function">nextclass="token punctuation">(class="token keyword">int class="token operator">&valclass="token punctuation">) class="token keyword">constclass="token punctuation">;
    class="token keyword">void class="token function">next_resetclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ _next class="token operator">= class="token number">1class="token punctuation">; class="token punctuation">}
    class="token comment">//获取元素值和重置_next指针;

    class="token keyword">static class="token keyword">bool class="token function">is_elemclass="token punctuation">(class="token keyword">intclass="token punctuation">)class="token punctuation">;
    class="token keyword">static class="token keyword">void class="token function">gen_elementsclass="token punctuation">(class="token keyword">int lengthclass="token punctuation">)class="token punctuation">;
    class="token keyword">static class="token keyword">void class="token function">gen_elems_to_valueclass="token punctuation">(class="token keyword">int valueclass="token punctuation">)class="token punctuation">;
    class="token keyword">static class="token keyword">void class="token function">displayclass="token punctuation">(class="token keyword">int lengthclass="token punctuation">, class="token keyword">int beg_posclass="token punctuation">, ostream class="token operator">&os class="token operator">= coutclass="token punctuation">)class="token punctuation">;
    class="token comment">//只能访问静态成员, 此处访问的是成员vector<int> _elems;

    class="token keyword">typedef Triangular_iterator iteratorclass="token punctuation">;
    Triangular_iterator class="token function">beginclass="token punctuation">(class="token punctuation">) class="token keyword">const
    class="token punctuation">{
        class="token keyword">return class="token function">Triangular_iteratorclass="token punctuation">(_beg_posclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    Triangular_iterator class="token function">endclass="token punctuation">(class="token punctuation">) class="token keyword">const
    class="token punctuation">{
        class="token keyword">return class="token function">Triangular_iteratorclass="token punctuation">(_beg_pos class="token operator">+ _lengthclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}

class="token keyword">privateclass="token operator">:
    class="token keyword">friend class="token keyword">class class="token class-name">Triangular_iteratorclass="token punctuation">; class="token comment">//作为Triangular类的iterator友元, 可访问private中的成员;
    class="token keyword">int _lengthclass="token punctuation">;
    class="token keyword">int _beg_posclass="token punctuation">;
    class="token keyword">mutable class="token keyword">int _nextclass="token punctuation">;
    class="token keyword">enum
    class="token punctuation">{
        _max_elems class="token operator">= class="token number">1024
    class="token punctuation">}class="token punctuation">;
    class="token keyword">static vectorclass="token operator"><class="token keyword">intclass="token operator">> _elemsclass="token punctuation">;
class="token punctuation">}class="token punctuation">;

ostream class="token operator">&class="token keyword">operatorclass="token operator"><<class="token punctuation">(ostream class="token operator">&osclass="token punctuation">, class="token keyword">const Triangular class="token operator">&rhsclass="token punctuation">)
class="token punctuation">{
    os class="token operator"><< class="token string">"( " class="token operator"><< rhsclass="token punctuation">.class="token function">beg_posclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">" , " class="token operator"><< rhsclass="token punctuation">.class="token function">lengthclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">" ) "class="token punctuation">;
    rhsclass="token punctuation">.class="token function">displayclass="token punctuation">(rhsclass="token punctuation">.class="token function">lengthclass="token punctuation">(class="token punctuation">)class="token punctuation">, rhsclass="token punctuation">.class="token function">beg_posclass="token punctuation">(class="token punctuation">)class="token punctuation">, osclass="token punctuation">)class="token punctuation">;
    class="token keyword">return osclass="token punctuation">;
class="token punctuation">}

istream class="token operator">&class="token keyword">operatorclass="token operator">>>class="token punctuation">(istream class="token operator">&isclass="token punctuation">, Triangular class="token operator">&rhsclass="token punctuation">)
class="token punctuation">{
    class="token keyword">char ch1class="token punctuation">, ch2class="token punctuation">;
    class="token keyword">int bpclass="token punctuation">, lenclass="token punctuation">;

    is class="token operator">>> ch1 class="token operator">>> bp class="token operator">>> ch2 class="token operator">>> lenclass="token punctuation">;
    rhsclass="token punctuation">.class="token function">beg_posclass="token punctuation">(bpclass="token punctuation">)class="token punctuation">;
    rhsclass="token punctuation">.class="token function">lengthclass="token punctuation">(lenclass="token punctuation">)class="token punctuation">;
    rhsclass="token punctuation">.class="token function">next_resetclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">return isclass="token punctuation">;
class="token punctuation">}

Triangularclass="token operator">::class="token function">Triangularclass="token punctuation">(class="token keyword">int lenclass="token punctuation">, class="token keyword">int beg_posclass="token punctuation">) class="token operator">: class="token function">_lengthclass="token punctuation">(len class="token operator">> class="token number">0 class="token operator">? len class="token operator">: class="token number">1class="token punctuation">)class="token punctuation">, class="token function">_beg_posclass="token punctuation">(beg_pos class="token operator">> class="token number">0 class="token operator">? beg_pos class="token operator">: class="token number">1class="token punctuation">)
class="token punctuation">{
    _next class="token operator">= _beg_posclass="token punctuation">;
    class="token keyword">int elem_cnt class="token operator">= _beg_pos class="token operator">+ _lengthclass="token punctuation">;
    class="token keyword">if class="token punctuation">(_elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator">< elem_cntclass="token punctuation">)
    class="token punctuation">{
        class="token function">gen_elementsclass="token punctuation">(elem_cntclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
class="token punctuation">}

Triangularclass="token operator">::class="token function">Triangularclass="token punctuation">(class="token keyword">const Triangular class="token operator">&rhsclass="token punctuation">) class="token operator">: class="token function">_lengthclass="token punctuation">(rhsclass="token punctuation">._lengthclass="token punctuation">)class="token punctuation">, class="token function">_beg_posclass="token punctuation">(rhsclass="token punctuation">._beg_posclass="token punctuation">)class="token punctuation">, class="token function">_nextclass="token punctuation">(rhsclass="token punctuation">._nextclass="token punctuation">)
class="token punctuation">{
class="token punctuation">}

class="token comment">//计算所有元素之和
class="token keyword">int class="token function">sumclass="token punctuation">(class="token keyword">const Triangular class="token operator">&trianclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(class="token number">0 class="token operator">== trianclass="token punctuation">.class="token function">lengthclass="token punctuation">(class="token punctuation">)class="token punctuation">)
    class="token punctuation">{
        class="token keyword">return class="token number">0class="token punctuation">;
    class="token punctuation">}
    class="token keyword">int valclass="token punctuation">, sum class="token operator">= class="token number">0class="token punctuation">;
    trianclass="token punctuation">.class="token function">next_resetclass="token punctuation">(class="token punctuation">)class="token punctuation">; class="token comment">//重置为起点开始累加;
    class="token keyword">while class="token punctuation">(trianclass="token punctuation">.class="token function">nextclass="token punctuation">(valclass="token punctuation">)class="token punctuation">)
    class="token punctuation">{
        sum class="token operator">+class="token operator">= valclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">return sumclass="token punctuation">;
class="token punctuation">}

class="token keyword">int Triangularclass="token operator">::class="token function">elemclass="token punctuation">(class="token keyword">int posclass="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">return _elemsclass="token punctuation">[pos class="token operator">- class="token number">1class="token punctuation">]class="token punctuation">;
class="token punctuation">}

class="token keyword">bool Triangularclass="token operator">::class="token function">nextclass="token punctuation">(class="token keyword">int class="token operator">&valueclass="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">if class="token punctuation">(class="token number">0 class="token operator">== _nextclass="token punctuation">)
    class="token punctuation">{
        class="token keyword">return class="token boolean">falseclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">if class="token punctuation">(_next class="token operator">< _beg_pos class="token operator">+ _lengthclass="token punctuation">)
    class="token punctuation">{
        value class="token operator">= _elemsclass="token punctuation">[_nextclass="token operator">++class="token punctuation">]class="token punctuation">;
        class="token keyword">return class="token boolean">trueclass="token punctuation">;
    class="token punctuation">}
    _next class="token operator">= class="token number">0class="token punctuation">;
    class="token keyword">return class="token boolean">falseclass="token punctuation">;
class="token punctuation">}

Triangular class="token operator">&Triangularclass="token operator">::class="token keyword">operatorclass="token operator">=class="token punctuation">(class="token keyword">const Triangular class="token operator">&rhsclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(class="token keyword">this class="token operator">!= class="token operator">&rhsclass="token punctuation">)
    class="token punctuation">{
        _length class="token operator">= rhsclass="token punctuation">._lengthclass="token punctuation">;
        _beg_pos class="token operator">= rhsclass="token punctuation">._beg_posclass="token punctuation">;
        _next class="token operator">= class="token number">1class="token punctuation">;
    class="token punctuation">}
    class="token keyword">return class="token operator">*class="token keyword">thisclass="token punctuation">;
class="token punctuation">}class="token punctuation">;

vectorclass="token operator"><class="token keyword">intclass="token operator">> Triangularclass="token operator">::_elemsclass="token punctuation">; class="token comment">//定义一个静态vector;

class="token keyword">bool Triangularclass="token operator">::class="token function">is_elemclass="token punctuation">(class="token keyword">int valueclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(class="token number">0 class="token operator">== _elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator">|| _elemsclass="token punctuation">[_elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator">- class="token number">1class="token punctuation">] class="token operator">< valueclass="token punctuation">)
    class="token punctuation">{
        class="token function">gen_elems_to_valueclass="token punctuation">(valueclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    class="token keyword">return class="token function">findclass="token punctuation">(_elemsclass="token punctuation">.class="token function">beginclass="token punctuation">(class="token punctuation">)class="token punctuation">, _elemsclass="token punctuation">.class="token function">endclass="token punctuation">(class="token punctuation">)class="token punctuation">, valueclass="token punctuation">) class="token operator">!= _elemsclass="token punctuation">.class="token function">endclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token punctuation">}

class="token keyword">void Triangularclass="token operator">::class="token function">gen_elementsclass="token punctuation">(class="token keyword">int lengthclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(length class="token operator">< class="token number">0 class="token operator">|| length class="token operator">> _max_elemsclass="token punctuation">)
    class="token punctuation">{
        cerr class="token operator"><< class="token string">"Triangular Sequence: oops: invalid size: "class="token punctuation">;
        cerr class="token operator"><< length class="token operator"><< class="token string">" -- max size is "class="token punctuation">;
        cerr class="token operator"><< _max_elems class="token operator"><< endlclass="token punctuation">;
        class="token keyword">returnclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">if class="token punctuation">(_elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator">< lengthclass="token punctuation">)
    class="token punctuation">{
        class="token keyword">int ix class="token operator">= _elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator">? _elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator">+ class="token number">1 class="token operator">: class="token number">1class="token punctuation">;
        class="token keyword">while class="token punctuation">(ix class="token operator"><= lengthclass="token punctuation">)
        class="token punctuation">{
            _elemsclass="token punctuation">.class="token function">push_backclass="token punctuation">(ix class="token operator">* class="token punctuation">(ix class="token operator">+ class="token number">1class="token punctuation">) class="token operator">/ class="token number">2class="token punctuation">)class="token punctuation">; class="token comment">//添加元素直到vector长度大于等于length;
            class="token operator">++ixclass="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">void Triangularclass="token operator">::class="token function">gen_elems_to_valueclass="token punctuation">(class="token keyword">int valueclass="token punctuation">)
class="token punctuation">{
    class="token keyword">int ix class="token operator">= _elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">if class="token punctuation">(class="token number">0 class="token operator">== ixclass="token punctuation">)
    class="token punctuation">{
        _elemsclass="token punctuation">.class="token function">push_backclass="token punctuation">(class="token number">1class="token punctuation">)class="token punctuation">;
        ix class="token operator">= class="token number">1class="token punctuation">;
    class="token punctuation">}
    class="token keyword">while class="token punctuation">(_elemsclass="token punctuation">[ix class="token operator">- class="token number">1class="token punctuation">] class="token operator">< value class="token operator">&& ix class="token operator">< _max_elemsclass="token punctuation">)
    class="token punctuation">{
        _elemsclass="token punctuation">.class="token function">push_backclass="token punctuation">(ix class="token operator">* class="token punctuation">(ix class="token operator">+ class="token number">1class="token punctuation">) class="token operator">/ class="token number">2class="token punctuation">)class="token punctuation">; class="token comment">//添加元素到vector中直到大于等于value;
        class="token operator">++ixclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">if class="token punctuation">(ix class="token operator">== _max_elemsclass="token punctuation">)
    class="token punctuation">{
        cerr class="token operator"><< class="token string">"Triangular Sequence: oops: value too large "class="token punctuation">;
        cerr class="token operator"><< value class="token operator"><< class="token string">" --  exceeds max size of "class="token punctuation">;
        cerr class="token operator"><< _max_elems class="token operator"><< endlclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">void Triangularclass="token operator">::class="token function">displayclass="token punctuation">(class="token keyword">int lengthclass="token punctuation">, class="token keyword">int beg_posclass="token punctuation">, ostream class="token operator">&osclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(length class="token operator"><= class="token number">0 class="token operator">|| beg_pos class="token operator"><= class="token number">0class="token punctuation">)
    class="token punctuation">{
        cerr class="token operator"><< class="token string">"invalid parameters -- unable to fulfill request: "class="token punctuation">;
        cerr class="token operator"><< length class="token operator"><< class="token string">", " class="token operator"><< beg_pos class="token operator"><< endlclass="token punctuation">;
        class="token keyword">returnclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">int elems class="token operator">= beg_pos class="token operator">+ length class="token operator">- class="token number">1class="token punctuation">;
    class="token keyword">if class="token punctuation">(_elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator">< elemsclass="token punctuation">)
    class="token punctuation">{
        class="token function">gen_elementsclass="token punctuation">(elemsclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    class="token keyword">for class="token punctuation">(class="token keyword">int ix class="token operator">= beg_pos class="token operator">- class="token number">1class="token punctuation">; ix class="token operator">< elemsclass="token punctuation">; class="token operator">++ixclass="token punctuation">)
    class="token punctuation">{
        os class="token operator"><< _elemsclass="token punctuation">[ixclass="token punctuation">] class="token operator"><< class="token string">' 'class="token punctuation">;
    class="token punctuation">}
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">inline class="token keyword">bool Triangular_iteratorclass="token operator">::class="token keyword">operatorclass="token operator">==class="token punctuation">(class="token keyword">const Triangular_iterator class="token operator">&rhsclass="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">return _index class="token operator">== rhsclass="token punctuation">._indexclass="token punctuation">; class="token comment">//判断2个Triangular类是否相等;
class="token punctuation">}

class="token keyword">inline class="token keyword">bool Triangular_iteratorclass="token operator">::class="token keyword">operatorclass="token operator">!=class="token punctuation">(class="token keyword">const Triangular_iterator class="token operator">&rhsclass="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">return class="token operator">!class="token punctuation">(class="token operator">*class="token keyword">this class="token operator">== rhsclass="token punctuation">)class="token punctuation">; class="token comment">//使用重载过的==运算符的非运算;
class="token punctuation">}

class="token keyword">class class="token class-name">iterator_overflow class="token comment">//声明一个异常类;
class="token punctuation">{
class="token punctuation">}class="token punctuation">;

class="token keyword">inline class="token keyword">void Triangular_iteratorclass="token operator">::class="token function">check_integrityclass="token punctuation">(class="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">if class="token punctuation">(_index class="token operator">> Triangularclass="token operator">::_max_elemsclass="token punctuation">)
    class="token punctuation">{
        class="token keyword">throw class="token function">iterator_overflowclass="token punctuation">(class="token punctuation">)class="token punctuation">; class="token comment">//抛出一个异常类iterator_overflow;
    class="token punctuation">}
    class="token keyword">if class="token punctuation">(_index class="token operator">> Triangularclass="token operator">::_elemsclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">)class="token punctuation">)
    class="token punctuation">{
        Triangularclass="token operator">::class="token function">gen_elementsclass="token punctuation">(_indexclass="token punctuation">)class="token punctuation">; class="token comment">//添加元素到vector中直到长度大于等于_index;
    class="token punctuation">}
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">inline class="token keyword">int Triangular_iteratorclass="token operator">::class="token keyword">operatorclass="token operator">*class="token punctuation">(class="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token function">check_integrityclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">return Triangularclass="token operator">::_elemsclass="token punctuation">[_indexclass="token punctuation">]class="token punctuation">; class="token comment">//获取_index索引中的元素;
class="token punctuation">}

class="token keyword">inline Triangular_iterator class="token operator">&Triangular_iteratorclass="token operator">::class="token keyword">operatorclass="token operator">++class="token punctuation">(class="token punctuation">)
class="token punctuation">{
    class="token operator">++_indexclass="token punctuation">; class="token comment">//递增下标;
    class="token function">check_integrityclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">return class="token operator">*class="token keyword">thisclass="token punctuation">; class="token comment">//返回新值;
class="token punctuation">}

class="token keyword">inline Triangular_iterator Triangular_iteratorclass="token operator">::class="token keyword">operatorclass="token operator">++class="token punctuation">(class="token keyword">intclass="token punctuation">)
class="token punctuation">{
    Triangular_iterator tmp class="token operator">= class="token operator">*class="token keyword">thisclass="token punctuation">; class="token comment">//存储先前值;
    class="token operator">++_indexclass="token punctuation">;                        class="token comment">//递增下标;
    class="token function">check_integrityclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">return tmpclass="token punctuation">; class="token comment">//返回先前值;
class="token punctuation">}

class="token comment">//函数对象作用是比较小于等于的值;
class="token keyword">class class="token class-name">LessThan
class="token punctuation">{
class="token keyword">publicclass="token operator">:
    class="token function">LessThanclass="token punctuation">(class="token keyword">int valclass="token punctuation">) class="token operator">: class="token function">_valclass="token punctuation">(valclass="token punctuation">) class="token punctuation">{class="token punctuation">}
    class="token keyword">int class="token function">comp_valclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _valclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">comp_valclass="token punctuation">(class="token keyword">int nvalclass="token punctuation">) class="token punctuation">{ _val class="token operator">= nvalclass="token punctuation">; class="token punctuation">}
    class="token keyword">bool class="token keyword">operatorclass="token punctuation">(class="token punctuation">)class="token punctuation">(class="token keyword">int valueclass="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return value class="token operator">< _valclass="token punctuation">; class="token punctuation">}

class="token keyword">privateclass="token operator">:
    class="token keyword">int _valclass="token punctuation">;
class="token punctuation">}class="token punctuation">;

class="token keyword">int class="token function">count_less_thanclass="token punctuation">(class="token keyword">const vectorclass="token operator"><class="token keyword">intclass="token operator">> class="token operator">&vecclass="token punctuation">, class="token keyword">int compclass="token punctuation">)
class="token punctuation">{
    class="token keyword">int count class="token operator">= class="token number">0class="token punctuation">;
    LessThan class="token function">ltclass="token punctuation">(compclass="token punctuation">)class="token punctuation">;

    class="token keyword">for class="token punctuation">(class="token keyword">int ix class="token operator">= class="token number">0class="token punctuation">; ix class="token operator">< vecclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">)class="token punctuation">; class="token operator">++ixclass="token punctuation">)
    class="token punctuation">{
        class="token keyword">if class="token punctuation">(class="token function">ltclass="token punctuation">(vecclass="token punctuation">[ixclass="token punctuation">]class="token punctuation">)class="token punctuation">) class="token comment">//直接调用;
        class="token punctuation">{
            class="token operator">++countclass="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}
    class="token keyword">return countclass="token punctuation">;
class="token punctuation">}

class="token keyword">void class="token function">print_less_thanclass="token punctuation">(class="token keyword">const vectorclass="token operator"><class="token keyword">intclass="token operator">> class="token operator">&vecclass="token punctuation">, class="token keyword">int compclass="token punctuation">, ostream class="token operator">&os class="token operator">= coutclass="token punctuation">)
class="token punctuation">{
    LessThan class="token function">ltclass="token punctuation">(compclass="token punctuation">)class="token punctuation">;
    vectorclass="token operator"><class="token keyword">intclass="token operator">>class="token operator">::const_iterator iter class="token operator">= vecclass="token punctuation">.class="token function">beginclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    vectorclass="token operator"><class="token keyword">intclass="token operator">>class="token operator">::const_iterator it_end class="token operator">= vecclass="token punctuation">.class="token function">endclass="token punctuation">(class="token punctuation">)class="token punctuation">;

    os class="token operator"><< class="token string">"elements less than " class="token operator"><< ltclass="token punctuation">.class="token function">comp_valclass="token punctuation">(class="token punctuation">) class="token operator"><< endlclass="token punctuation">;
    class="token keyword">while class="token punctuation">(class="token punctuation">(iter class="token operator">= class="token function">find_ifclass="token punctuation">(iterclass="token punctuation">, it_endclass="token punctuation">, ltclass="token punctuation">)class="token punctuation">) class="token operator">!= it_endclass="token punctuation">) class="token comment">//作为参数调用标准模板库函数find_if;
    class="token punctuation">{
        os class="token operator"><< class="token operator">*iter class="token operator"><< class="token string">' 'class="token punctuation">;
        class="token operator">++iterclass="token punctuation">;
    class="token punctuation">}
    os class="token operator"><< endlclass="token punctuation">;
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">void class="token function">prog1class="token punctuation">(class="token punctuation">)
class="token punctuation">{
    class="token keyword">char chclass="token punctuation">;
    class="token keyword">int ivalclass="token punctuation">;
    class="token keyword">bool more class="token operator">= class="token boolean">trueclass="token punctuation">;

    class="token keyword">while class="token punctuation">(moreclass="token punctuation">)
    class="token punctuation">{
        cout class="token operator"><< class="token string">"Enter value: "class="token punctuation">;
        cin class="token operator">>> ivalclass="token punctuation">;

        class="token keyword">bool is_elem class="token operator">= Triangularclass="token operator">::class="token function">is_elemclass="token punctuation">(ivalclass="token punctuation">)class="token punctuation">;
        cout class="token operator"><< ivalclass="token punctuation">;
        cout class="token operator"><< class="token punctuation">(is_elem class="token operator">? class="token string">" is " class="token operator">: class="token string">" is not "class="token punctuation">)class="token punctuation">;
        cout class="token operator"><< class="token string">"an element in the Triangular series.\n"class="token punctuation">;
        cout class="token operator"><< class="token string">"Another value? (y/n) "class="token punctuation">;
        cin class="token operator">>> chclass="token punctuation">;
        class="token keyword">if class="token punctuation">(ch class="token operator">== class="token string">'n' class="token operator">|| ch class="token operator">== class="token string">'N'class="token punctuation">)
        class="token punctuation">{
            more class="token operator">= class="token boolean">falseclass="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">void class="token function">prog2class="token punctuation">(class="token punctuation">)
class="token punctuation">{
    Triangular class="token function">triclass="token punctuation">(class="token number">20class="token punctuation">, class="token number">12class="token punctuation">)class="token punctuation">;
    Triangularclass="token operator">::iterator it class="token operator">= triclass="token punctuation">.class="token function">beginclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    Triangularclass="token operator">::iterator end_it class="token operator">= triclass="token punctuation">.class="token function">endclass="token punctuation">(class="token punctuation">)class="token punctuation">;

    cout class="token operator"><< class="token string">"Triangular Series of " class="token operator"><< triclass="token punctuation">.class="token function">lengthclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">" elements\n"class="token punctuation">;
    cout class="token operator"><< tri class="token operator"><< endlclass="token punctuation">;
    class="token keyword">while class="token punctuation">(it class="token operator">!= end_itclass="token punctuation">)
    class="token punctuation">{
        cout class="token operator"><< class="token operator">*it class="token operator"><< class="token string">' 'class="token punctuation">;
        class="token operator">++itclass="token punctuation">;
    class="token punctuation">}
    cout class="token operator"><< endlclass="token punctuation">;
class="token punctuation">}

class="token keyword">void class="token function">prog3class="token punctuation">(class="token punctuation">)
class="token punctuation">{
    class="token keyword">int iaclass="token punctuation">[class="token number">16class="token punctuation">] class="token operator">= class="token punctuation">{class="token number">17class="token punctuation">, class="token number">12class="token punctuation">, class="token number">44class="token punctuation">, class="token number">9class="token punctuation">, class="token number">18class="token punctuation">, class="token number">45class="token punctuation">, class="token number">6class="token punctuation">, class="token number">14class="token punctuation">,
                  class="token number">23class="token punctuation">, class="token number">67class="token punctuation">, class="token number">9class="token punctuation">, class="token number">0class="token punctuation">, class="token number">27class="token punctuation">, class="token number">55class="token punctuation">, class="token number">8class="token punctuation">, class="token number">16class="token punctuation">}class="token punctuation">;

    vectorclass="token operator"><class="token keyword">intclass="token operator">> class="token function">vecclass="token punctuation">(iaclass="token punctuation">, ia class="token operator">+ class="token number">16class="token punctuation">)class="token punctuation">;
    class="token keyword">int comp_val class="token operator">= class="token number">20class="token punctuation">;

    cout class="token operator"><< class="token string">"Number of elements less than "class="token punctuation">;
    cout class="token operator"><< comp_val class="token operator"><< class="token string">" are "class="token punctuation">;
    cout class="token operator"><< class="token function">count_less_thanclass="token punctuation">(vecclass="token punctuation">, comp_valclass="token punctuation">) class="token operator"><< endlclass="token punctuation">;
    class="token function">print_less_thanclass="token punctuation">(vecclass="token punctuation">, comp_valclass="token punctuation">)class="token punctuation">;
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">void class="token function">prog4class="token punctuation">(class="token punctuation">)
class="token punctuation">{
    Triangular class="token function">triclass="token punctuation">(class="token number">6class="token punctuation">, class="token number">3class="token punctuation">)class="token punctuation">;
    cout class="token operator"><< tri class="token operator"><< endlclass="token punctuation">;

    Triangular tri2class="token punctuation">;
    cout class="token operator"><< class="token string">"Please enter as the example (3, 5): "class="token punctuation">;
    cin class="token operator">>> tri2class="token punctuation">;
    cout class="token operator"><< tri2 class="token operator"><< endlclass="token punctuation">;
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">void class="token function">prog5class="token punctuation">(class="token punctuation">)
class="token punctuation">{
    Triangular class="token function">triclass="token punctuation">(class="token number">4class="token punctuation">, class="token number">3class="token punctuation">)class="token punctuation">;
    Triangularclass="token operator">::iterator it class="token operator">= triclass="token punctuation">.class="token function">beginclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    Triangularclass="token operator">::iterator end_it class="token operator">= triclass="token punctuation">.class="token function">endclass="token punctuation">(class="token punctuation">)class="token punctuation">;

    cout class="token operator"><< class="token string">"Triangular Series of " class="token operator"><< triclass="token punctuation">.class="token function">lengthclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">" elements\n"class="token punctuation">;
    cout class="token operator"><< tri class="token operator"><< endlclass="token punctuation">;

    class="token keyword">while class="token punctuation">(it class="token operator">!= end_itclass="token punctuation">)
    class="token punctuation">{
        cout class="token operator"><< class="token operator">*it class="token operator"><< class="token string">' 'class="token punctuation">;
        class="token operator">++itclass="token punctuation">;
    class="token punctuation">}
    cout class="token operator"><< endlclass="token punctuation">;
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">int class="token function">mainclass="token punctuation">(class="token punctuation">)
class="token punctuation">{
    class="token function">prog1class="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token function">prog2class="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token function">prog3class="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token function">prog4class="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token function">prog5class="token punctuation">(class="token punctuation">)class="token punctuation">;

    class="token keyword">return class="token number">0class="token punctuation">;
class="token punctuation">}

//-----------------------------------------------------------;

//-----------------------------------------------------------;
//Practise 4.1 and 4.2.cpp

class="prism language-cpp">class="token macro property">#class="token directive keyword">include class="token string"><iostream>
class="token macro property">#class="token directive keyword">include class="token string">"Stack.h"

class="token keyword">int class="token function">mainclass="token punctuation">(class="token punctuation">)
class="token punctuation">{
    Stack stclass="token punctuation">;
    string strclass="token punctuation">;

    class="token keyword">while class="token punctuation">(cin class="token operator">>> str class="token operator">&& class="token operator">!stclass="token punctuation">.class="token function">fullclass="token punctuation">(class="token punctuation">)class="token punctuation">)
    class="token punctuation">{
        stclass="token punctuation">.class="token function">pushclass="token punctuation">(strclass="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    cout class="token operator"><< class="token string">"Read in " class="token operator"><< stclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">" strings!\n"class="token punctuation">;
    cinclass="token punctuation">.class="token function">clearclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    cout class="token operator"><< class="token string">"what word to search for? "class="token punctuation">;
    cin class="token operator">>> strclass="token punctuation">;
    class="token keyword">bool found class="token operator">= stclass="token punctuation">.class="token function">findclass="token punctuation">(strclass="token punctuation">)class="token punctuation">;
    class="token keyword">int count class="token operator">= found class="token operator">? stclass="token punctuation">.class="token function">countclass="token punctuation">(strclass="token punctuation">) class="token operator">: class="token number">0class="token punctuation">;
    cout class="token operator"><< str class="token operator"><< class="token punctuation">(found class="token operator">? class="token string">" is " class="token operator">: class="token string">" isn\'t "class="token punctuation">)class="token punctuation">;
    cout class="token operator"><< class="token string">"in the stack. "class="token punctuation">;
    class="token keyword">if class="token punctuation">(foundclass="token punctuation">)
    class="token punctuation">{
        cout class="token operator"><< class="token string">"It occurs " class="token operator"><< count class="token operator"><< class="token string">" times\n"class="token punctuation">;
    class="token punctuation">}

    class="token keyword">return class="token number">0class="token punctuation">;
class="token punctuation">}

//-----------------------------------------------------------;
//Stack.h

class="prism language-cpp">class="token macro property">#class="token directive keyword">ifndef STACK_H_
class="token macro property">#class="token directive keyword">define STACK_H_
class="token macro property">#class="token directive keyword">include class="token string"><string>
class="token macro property">#class="token directive keyword">include class="token string"><vector>
class="token keyword">using class="token keyword">namespace stdclass="token punctuation">;

class="token keyword">class class="token class-name">Stack
class="token punctuation">{
class="token keyword">publicclass="token operator">:
    class="token keyword">bool class="token function">pushclass="token punctuation">(class="token keyword">const string class="token operator">&class="token punctuation">)class="token punctuation">;
    class="token keyword">bool class="token function">popclass="token punctuation">(string class="token operator">&elemclass="token punctuation">)class="token punctuation">;
    class="token keyword">bool class="token function">peekclass="token punctuation">(string class="token operator">&elemclass="token punctuation">)class="token punctuation">;

    class="token keyword">bool class="token function">findclass="token punctuation">(class="token keyword">const string class="token operator">&elemclass="token punctuation">) class="token keyword">constclass="token punctuation">;
    class="token keyword">int class="token function">countclass="token punctuation">(class="token keyword">const string class="token operator">&elemclass="token punctuation">) class="token keyword">constclass="token punctuation">;

    class="token keyword">bool class="token function">emptyclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _stackclass="token punctuation">.class="token function">emptyclass="token punctuation">(class="token punctuation">)class="token punctuation">; class="token punctuation">}
    class="token keyword">bool class="token function">fullclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _stackclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token operator">== _stackclass="token punctuation">.class="token function">max_sizeclass="token punctuation">(class="token punctuation">)class="token punctuation">; class="token punctuation">}
    class="token keyword">int class="token function">sizeclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _stackclass="token punctuation">.class="token function">sizeclass="token punctuation">(class="token punctuation">)class="token punctuation">; class="token punctuation">}

class="token keyword">privateclass="token operator">:
    vectorclass="token operator"><stringclass="token operator">> _stackclass="token punctuation">;
class="token punctuation">}class="token punctuation">;

class="token macro property">#class="token directive keyword">endif

//-----------------------------------------------------------;
//Stack.cpp

class="prism language-cpp">class="token macro property">#class="token directive keyword">include class="token string"><algorithm>
class="token macro property">#class="token directive keyword">include class="token string">"Stack.h"

class="token keyword">bool Stackclass="token operator">::class="token function">popclass="token punctuation">(string class="token operator">&elemclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(class="token function">emptyclass="token punctuation">(class="token punctuation">)class="token punctuation">)
    class="token punctuation">{
        class="token keyword">return class="token boolean">falseclass="token punctuation">;
    class="token punctuation">}
    elem class="token operator">= _stackclass="token punctuation">.class="token function">backclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    _stackclass="token punctuation">.class="token function">pop_backclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">return class="token boolean">trueclass="token punctuation">;
class="token punctuation">}

class="token keyword">bool Stackclass="token operator">::class="token function">peekclass="token punctuation">(string class="token operator">&elemclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(class="token function">emptyclass="token punctuation">(class="token punctuation">)class="token punctuation">)
    class="token punctuation">{
        class="token keyword">return class="token boolean">falseclass="token punctuation">;
    class="token punctuation">}
    elem class="token operator">= _stackclass="token punctuation">.class="token function">backclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token keyword">return class="token boolean">trueclass="token punctuation">;
class="token punctuation">}

class="token keyword">bool Stackclass="token operator">::class="token function">pushclass="token punctuation">(class="token keyword">const string class="token operator">&elemclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(class="token function">fullclass="token punctuation">(class="token punctuation">)class="token punctuation">)
    class="token punctuation">{
        class="token keyword">return class="token boolean">falseclass="token punctuation">;
    class="token punctuation">}
    _stackclass="token punctuation">.class="token function">push_backclass="token punctuation">(elemclass="token punctuation">)class="token punctuation">;
    class="token keyword">return class="token boolean">trueclass="token punctuation">;
class="token punctuation">}

class="token keyword">bool Stackclass="token operator">::class="token function">findclass="token punctuation">(class="token keyword">const string class="token operator">&elemclass="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">return stdclass="token operator">::class="token function">findclass="token punctuation">(_stackclass="token punctuation">.class="token function">beginclass="token punctuation">(class="token punctuation">)class="token punctuation">, _stackclass="token punctuation">.class="token function">endclass="token punctuation">(class="token punctuation">)class="token punctuation">, elemclass="token punctuation">) class="token operator">!= _stackclass="token punctuation">.class="token function">endclass="token punctuation">(class="token punctuation">)class="token punctuation">;
class="token punctuation">}

class="token keyword">int Stackclass="token operator">::class="token function">countclass="token punctuation">(class="token keyword">const string class="token operator">&elemclass="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">return stdclass="token operator">::class="token function">countclass="token punctuation">(_stackclass="token punctuation">.class="token function">beginclass="token punctuation">(class="token punctuation">)class="token punctuation">, _stackclass="token punctuation">.class="token function">endclass="token punctuation">(class="token punctuation">)class="token punctuation">, elemclass="token punctuation">)class="token punctuation">;
class="token punctuation">}

//-----------------------------------------------------------;

//-----------------------------------------------------------;
//Practise4.3.cpp

class="prism language-cpp">class="token macro property">#class="token directive keyword">include class="token string"><iostream>
class="token macro property">#class="token directive keyword">include class="token string"><string>
class="token keyword">using class="token keyword">namespace stdclass="token punctuation">;

class="token keyword">class class="token class-name">globalWrapper
class="token punctuation">{
class="token keyword">publicclass="token operator">:
    class="token keyword">static class="token keyword">int class="token function">tests_passedclass="token punctuation">(class="token punctuation">) class="token punctuation">{ class="token keyword">return _tests_passedclass="token punctuation">; class="token punctuation">}
    class="token keyword">static class="token keyword">int class="token function">tests_runclass="token punctuation">(class="token punctuation">) class="token punctuation">{ class="token keyword">return _tests_runclass="token punctuation">; class="token punctuation">}
    class="token keyword">static class="token keyword">int class="token function">version_numberclass="token punctuation">(class="token punctuation">) class="token punctuation">{ class="token keyword">return _version_numberclass="token punctuation">; class="token punctuation">}
    class="token keyword">static string class="token function">version_stampclass="token punctuation">(class="token punctuation">) class="token punctuation">{ class="token keyword">return _version_stampclass="token punctuation">; class="token punctuation">}
    class="token keyword">static string class="token function">program_nameclass="token punctuation">(class="token punctuation">) class="token punctuation">{ class="token keyword">return _program_nameclass="token punctuation">; class="token punctuation">}

    class="token keyword">static class="token keyword">void class="token function">tests_passedclass="token punctuation">(class="token keyword">int nvalclass="token punctuation">) class="token punctuation">{ _tests_passed class="token operator">= nvalclass="token punctuation">; class="token punctuation">}
    class="token keyword">static class="token keyword">void class="token function">tests_runclass="token punctuation">(class="token keyword">int nvalclass="token punctuation">) class="token punctuation">{ _tests_run class="token operator">= nvalclass="token punctuation">; class="token punctuation">}
    class="token keyword">static class="token keyword">void class="token function">version_numberclass="token punctuation">(class="token keyword">int nvalclass="token punctuation">) class="token punctuation">{ _version_number class="token operator">= nvalclass="token punctuation">; class="token punctuation">}
    class="token keyword">static class="token keyword">void class="token function">version_stampclass="token punctuation">(class="token keyword">const string class="token operator">&nstampclass="token punctuation">) class="token punctuation">{ _version_stamp class="token operator">= nstampclass="token punctuation">; class="token punctuation">}
    class="token keyword">static class="token keyword">void class="token function">program_nameclass="token punctuation">(class="token keyword">const string class="token operator">&npnclass="token punctuation">) class="token punctuation">{ _program_name class="token operator">= npnclass="token punctuation">; class="token punctuation">}

class="token keyword">privateclass="token operator">:
    class="token keyword">static string _program_nameclass="token punctuation">;
    class="token keyword">static string _version_stampclass="token punctuation">;
    class="token keyword">static class="token keyword">int _version_numberclass="token punctuation">;
    class="token keyword">static class="token keyword">int _tests_runclass="token punctuation">;
    class="token keyword">static class="token keyword">int _tests_passedclass="token punctuation">;
class="token punctuation">}class="token punctuation">;

string globalWrapperclass="token operator">::_program_nameclass="token punctuation">;
string globalWrapperclass="token operator">::_version_stampclass="token punctuation">;
class="token keyword">int globalWrapperclass="token operator">::_version_numberclass="token punctuation">;
class="token keyword">int globalWrapperclass="token operator">::_tests_runclass="token punctuation">;
class="token keyword">int globalWrapperclass="token operator">::_tests_passedclass="token punctuation">;

class="token keyword">int class="token function">mainclass="token punctuation">(class="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(globalWrapperclass="token operator">::class="token function">program_nameclass="token punctuation">(class="token punctuation">)class="token punctuation">.class="token function">emptyclass="token punctuation">(class="token punctuation">)class="token punctuation">)
    class="token punctuation">{
        globalWrapperclass="token operator">::class="token function">program_nameclass="token punctuation">(class="token string">"ex_4_3"class="token punctuation">)class="token punctuation">;
        globalWrapperclass="token operator">::class="token function">version_numberclass="token punctuation">(class="token number">1class="token punctuation">)class="token punctuation">;
        globalWrapperclass="token operator">::class="token function">version_stampclass="token punctuation">(class="token string">"A1-OK"class="token punctuation">)class="token punctuation">;
    class="token punctuation">}
    class="token keyword">if class="token punctuation">(globalWrapperclass="token operator">::class="token function">program_nameclass="token punctuation">(class="token punctuation">) class="token operator">== class="token string">"ex_4_3"class="token punctuation">)
    class="token punctuation">{
        cout class="token operator"><< class="token string">"globalWrapper seems to work ok\n"class="token punctuation">;
    class="token punctuation">}
    class="token keyword">else
    class="token punctuation">{
        cout class="token operator"><< class="token string">"Hmm. globalWrapper doesn't seem to be correct\n"class="token punctuation">;
    class="token punctuation">}

    class="token keyword">return class="token number">0class="token punctuation">;
class="token punctuation">}

//-----------------------------------------------------------;

//-----------------------------------------------------------;
//Practise4.4.cpp

class="prism language-cpp">class="token macro property">#class="token directive keyword">include class="token string"><iostream>
class="token macro property">#class="token directive keyword">include class="token string"><string>
class="token keyword">using class="token keyword">namespace stdclass="token punctuation">;

class="token keyword">class class="token class-name">UserProfile
class="token punctuation">{
class="token keyword">publicclass="token operator">:
    class="token keyword">enum Level
    class="token punctuation">{
        Beginnerclass="token punctuation">,
        Intermediateclass="token punctuation">,
        Advancedclass="token punctuation">,
        Professional
    class="token punctuation">}class="token punctuation">;
    class="token function">UserProfileclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    class="token function">UserProfileclass="token punctuation">(string loginclass="token punctuation">, Level class="token operator">= Beginnerclass="token punctuation">) class="token operator">: class="token function">_loginclass="token punctuation">(loginclass="token punctuation">)class="token punctuation">, class="token function">_user_levelclass="token punctuation">(levelclass="token punctuation">)class="token punctuation">, class="token function">_times_loggedclass="token punctuation">(class="token number">1class="token punctuation">)class="token punctuation">, class="token function">_guessesclass="token punctuation">(class="token number">0class="token punctuation">)class="token punctuation">, class="token function">_correct_guessesclass="token punctuation">(class="token number">0class="token punctuation">) class="token punctuation">{class="token punctuation">}
    class="token keyword">bool class="token keyword">operatorclass="token operator">==class="token punctuation">(class="token keyword">const UserProfile class="token operator">&class="token punctuation">) class="token punctuation">{ class="token keyword">return _login class="token operator">== rhsclass="token punctuation">._login class="token operator">&& _user_name class="token operator">== rhsclass="token punctuation">._user_nameclass="token punctuation">; class="token punctuation">}
    class="token keyword">bool class="token keyword">operatorclass="token operator">!=class="token punctuation">(class="token keyword">const UserProfile class="token operator">&rhsclass="token punctuation">) class="token punctuation">{ class="token keyword">return class="token operator">!class="token punctuation">(class="token operator">*class="token keyword">this class="token operator">== rhsclass="token punctuation">)class="token punctuation">; class="token punctuation">}

    class="token comment">//以下函数用来读取数据;
    string class="token function">loginclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _loginclass="token punctuation">; class="token punctuation">}
    string class="token function">user_nameclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _user_nameclass="token punctuation">; class="token punctuation">}
    class="token keyword">int class="token function">login_countclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _times_loggedclass="token punctuation">; class="token punctuation">}
    class="token keyword">int class="token function">guess_countclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _guessesclass="token punctuation">; class="token punctuation">}
    class="token keyword">int class="token function">guess_correctclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _correct_guessesclass="token punctuation">; class="token punctuation">}
    class="token keyword">double class="token function">guess_averageclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return _guesses class="token operator">!= class="token number">0.0 class="token operator">? class="token keyword">doubleclass="token punctuation">(_correct_guessesclass="token punctuation">) class="token operator">/ class="token keyword">doubleclass="token punctuation">(_guessesclass="token punctuation">) class="token operator">* class="token number">100 class="token operator">: class="token number">0.0class="token punctuation">; class="token punctuation">}
    class="token comment">//实时计算猜对百分比;
    string class="token function">levelclass="token punctuation">(class="token punctuation">) class="token keyword">constclass="token punctuation">;

    class="token comment">//以下函数用来写入数据;
    class="token keyword">void class="token function">reset_loginclass="token punctuation">(class="token keyword">const string class="token operator">&valclass="token punctuation">) class="token punctuation">{ _login class="token operator">= valclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">user_nameclass="token punctuation">(class="token keyword">const string class="token operator">&valclass="token punctuation">) class="token punctuation">{ _user_name class="token operator">= valclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">reset_levelclass="token punctuation">(class="token keyword">const string class="token operator">&class="token punctuation">)class="token punctuation">;
    class="token keyword">void class="token function">reset_levelclass="token punctuation">(Level newlevelclass="token punctuation">) class="token punctuation">{ _user_level class="token operator">= newlevelclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">reset_login_countclass="token punctuation">(class="token keyword">int valclass="token punctuation">) class="token punctuation">{ _times_logged class="token operator">= valclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">reset_guess_countclass="token punctuation">(class="token keyword">int valclass="token punctuation">) class="token punctuation">{ _guesses class="token operator">= valclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">reset_guess_correctclass="token punctuation">(class="token keyword">int valclass="token punctuation">) class="token punctuation">{ _correct_guesses class="token operator">= valclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">bump_login_countclass="token punctuation">(class="token keyword">int cnt class="token operator">= class="token number">1class="token punctuation">) class="token punctuation">{ _times_logged class="token operator">+class="token operator">= cntclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">bump_guess_countclass="token punctuation">(class="token keyword">int cnt class="token operator">= class="token number">1class="token punctuation">) class="token punctuation">{ _guesses class="token operator">+class="token operator">= cntclass="token punctuation">; class="token punctuation">}
    class="token keyword">void class="token function">bump_guess_correctclass="token punctuation">(class="token keyword">int cnt class="token operator">= class="token number">1class="token punctuation">) class="token punctuation">{ _correct_guesses class="token operator">+class="token operator">= cntclass="token punctuation">; class="token punctuation">}

class="token keyword">privateclass="token operator">:
    string _loginclass="token punctuation">;        class="token comment">//登陆记录;
    string _user_nameclass="token punctuation">;    class="token comment">//实际姓名;
    class="token keyword">int _times_loggedclass="token punctuation">;    class="token comment">//登入次数;
    class="token keyword">int _guessesclass="token punctuation">;         class="token comment">//猜过次数;
    class="token keyword">int _correct_guessesclass="token punctuation">; class="token comment">//猜对次数;
    Level _user_levelclass="token punctuation">;    class="token comment">//等级;
class="token punctuation">}class="token punctuation">;

class="token keyword">inline UserProfileclass="token operator">::class="token function">UserProfileclass="token punctuation">(class="token punctuation">) class="token operator">: class="token function">_loginclass="token punctuation">(class="token string">"guest"class="token punctuation">)class="token punctuation">, class="token function">_user_levelclass="token punctuation">(Beginnerclass="token punctuation">)class="token punctuation">, class="token function">_times_loggedclass="token punctuation">(class="token number">1class="token punctuation">)class="token punctuation">, class="token function">_guessesclass="token punctuation">(class="token number">0class="token punctuation">)class="token punctuation">, class="token function">_correct_guessesclass="token punctuation">(class="token number">0class="token punctuation">)
class="token punctuation">{
    class="token keyword">static class="token keyword">int id class="token operator">= class="token number">0class="token punctuation">;
    class="token operator">++idclass="token punctuation">;
    class="token comment">//对于guest加入一个独一无二的会话标识符;
    _login class="token operator">+class="token operator">= class="token function">to_stringclass="token punctuation">(idclass="token punctuation">)class="token punctuation">;
class="token punctuation">}

class="token keyword">inline string UserProfileclass="token operator">::class="token function">levelclass="token punctuation">(class="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">static string _level_tableclass="token punctuation">[class="token number">4class="token punctuation">] class="token operator">= class="token punctuation">{class="token string">"Beginner"class="token punctuation">, class="token string">"Intermediate"class="token punctuation">, class="token string">"Advanced"class="token punctuation">, class="token string">"Professional"class="token punctuation">}class="token punctuation">;
    class="token keyword">return _level_tableclass="token punctuation">[_user_levelclass="token punctuation">]class="token punctuation">;
class="token punctuation">}

ostream class="token operator">&class="token keyword">operatorclass="token operator"><<class="token punctuation">(ostream class="token operator">&osclass="token punctuation">, class="token keyword">const UserProfile class="token operator">&rhsclass="token punctuation">)
class="token punctuation">{
    os class="token operator"><< rhsclass="token punctuation">.class="token function">loginclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">' 'class="token punctuation">;
    os class="token operator"><< rhsclass="token punctuation">.class="token function">levelclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">' 'class="token punctuation">;
    os class="token operator"><< rhsclass="token punctuation">.class="token function">login_countclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">' 'class="token punctuation">;
    os class="token operator"><< rhsclass="token punctuation">.class="token function">guess_countclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">' 'class="token punctuation">;
    os class="token operator"><< rhsclass="token punctuation">.class="token function">guess_correctclass="token punctuation">(class="token punctuation">) class="token operator"><< class="token string">' 'class="token punctuation">;
    os class="token operator"><< rhsclass="token punctuation">.class="token function">guess_averageclass="token punctuation">(class="token punctuation">) class="token operator"><< endlclass="token punctuation">;
    class="token keyword">return osclass="token punctuation">;
class="token punctuation">}

istream class="token operator">&class="token keyword">operatorclass="token operator">>>class="token punctuation">(istream class="token operator">&isclass="token punctuation">, UserProfile class="token operator">&rhsclass="token punctuation">)
class="token punctuation">{
    string loginclass="token punctuation">, levelclass="token punctuation">;
    class="token keyword">int lcountclass="token punctuation">, gcountclass="token punctuation">, gcorrectclass="token punctuation">;

    is class="token operator">>> login class="token operator">>> levelclass="token punctuation">;
    is class="token operator">>> lcount class="token operator">>> gcount class="token operator">>> gcorrectclass="token punctuation">;
    rhsclass="token punctuation">.class="token function">reset_loginclass="token punctuation">(loginclass="token punctuation">)class="token punctuation">;
    rhsclass="token punctuation">.class="token function">reset_levelclass="token punctuation">(levelclass="token punctuation">)class="token punctuation">;
    rhsclass="token punctuation">.class="token function">reset_login_countclass="token punctuation">(lcountclass="token punctuation">)class="token punctuation">;
    rhsclass="token punctuation">.class="token function">reset_guess_countclass="token punctuation">(gcountclass="token punctuation">)class="token punctuation">;
    rhsclass="token punctuation">.class="token function">reset_guess_correctclass="token punctuation">(gcorrectclass="token punctuation">)class="token punctuation">;
    class="token keyword">return isclass="token punctuation">;
class="token punctuation">}

class="token keyword">inline class="token keyword">void UserProfileclass="token operator">::class="token function">reset_levelclass="token punctuation">(class="token keyword">const string class="token operator">&levelclass="token punctuation">)
class="token punctuation">{
    class="token keyword">if class="token punctuation">(level class="token operator">== class="token string">"Intermediate"class="token punctuation">)
    class="token punctuation">{
        _user_level class="token operator">= Intermediateclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">else class="token keyword">if class="token punctuation">(level class="token operator">== class="token string">"Advanced"class="token punctuation">)
    class="token punctuation">{
        _user_level class="token operator">= Advancedclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">else class="token keyword">if class="token punctuation">(level class="token operator">== class="token string">"Professional"class="token punctuation">)
    class="token punctuation">{
        _user_level class="token operator">= Professionalclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">else
    class="token punctuation">{
        _user_level class="token operator">= Beginnerclass="token punctuation">;
    class="token punctuation">}
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">int class="token function">mainclass="token punctuation">(class="token punctuation">)
class="token punctuation">{
    UserProfile anonclass="token punctuation">;
    cout class="token operator"><< anonclass="token punctuation">;

    UserProfile anon_tooclass="token punctuation">;
    cout class="token operator"><< anon_tooclass="token punctuation">;

    UserProfile class="token function">annaclass="token punctuation">(class="token string">"AnnaL"class="token punctuation">, UserProfileclass="token operator">::Professionalclass="token punctuation">)class="token punctuation">;
    cout class="token operator"><< annaclass="token punctuation">;

    annaclass="token punctuation">.class="token function">bump_guess_countclass="token punctuation">(class="token number">27class="token punctuation">)class="token punctuation">;
    annaclass="token punctuation">.class="token function">bump_guess_correctclass="token punctuation">(class="token number">25class="token punctuation">)class="token punctuation">;
    annaclass="token punctuation">.class="token function">bump_login_countclass="token punctuation">(class="token punctuation">)class="token punctuation">;
    cout class="token operator"><< annaclass="token punctuation">;

    cin class="token operator">>> anonclass="token punctuation">;
    class="token comment">//输入: robin Intermediate 1 8 3
    cout class="token operator"><< anonclass="token punctuation">;

    class="token keyword">return class="token number">0class="token punctuation">;
class="token punctuation">}

//-----------------------------------------------------------;

//-----------------------------------------------------------;
//Practise4.5.cpp

class="prism language-cpp">class="token macro property">#class="token directive keyword">include class="token string"><iostream>
class="token keyword">using class="token keyword">namespace stdclass="token punctuation">;

class="token keyword">typedef class="token keyword">float elemTypeclass="token punctuation">;
class="token keyword">class class="token class-name">Matrix
class="token punctuation">{
class="token keyword">publicclass="token operator">:
    class="token function">Matrixclass="token punctuation">(elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">,
           elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">,
           elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">,
           elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">, elemType class="token operator">= class="token number">0.0fclass="token punctuation">)class="token punctuation">;
    class="token function">Matrixclass="token punctuation">(class="token keyword">const elemType class="token operator">*class="token punctuation">)class="token punctuation">;
    class="token keyword">void class="token keyword">operatorclass="token operator">+class="token operator">=class="token punctuation">(class="token keyword">const Matrix class="token operator">&class="token punctuation">)class="token punctuation">;
    elemType class="token operator">&class="token keyword">operatorclass="token punctuation">(class="token punctuation">)class="token punctuation">(class="token keyword">int rowclass="token punctuation">, class="token keyword">int columnclass="token punctuation">)
    class="token punctuation">{
        class="token keyword">return _matrixclass="token punctuation">[rowclass="token punctuation">]class="token punctuation">[columnclass="token punctuation">]class="token punctuation">;
    class="token punctuation">}
    class="token keyword">int class="token function">rowsclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return class="token number">4class="token punctuation">; class="token punctuation">}
    class="token keyword">int class="token function">colsclass="token punctuation">(class="token punctuation">) class="token keyword">const class="token punctuation">{ class="token keyword">return class="token number">4class="token punctuation">; class="token punctuation">}
    elemType class="token keyword">operatorclass="token punctuation">(class="token punctuation">)class="token punctuation">(class="token keyword">int rowclass="token punctuation">, class="token keyword">int columnclass="token punctuation">) class="token keyword">const
    class="token punctuation">{
        class="token keyword">return _matrixclass="token punctuation">[rowclass="token punctuation">]class="token punctuation">[columnclass="token punctuation">]class="token punctuation">;
    class="token punctuation">}
    ostream class="token operator">&class="token function">printclass="token punctuation">(ostream class="token operator">&class="token punctuation">) class="token keyword">constclass="token punctuation">;

class="token keyword">privateclass="token operator">:
    class="token keyword">friend Matrix class="token keyword">operatorclass="token operator">+class="token punctuation">(class="token keyword">const Matrix class="token operator">&class="token punctuation">, class="token keyword">const Matrix class="token operator">&class="token punctuation">)class="token punctuation">;
    class="token keyword">friend Matrix class="token keyword">operatorclass="token operator">*class="token punctuation">(class="token keyword">const Matrix class="token operator">&class="token punctuation">, class="token keyword">const Matrix class="token operator">&class="token punctuation">)class="token punctuation">;
    elemType _matrixclass="token punctuation">[class="token number">4class="token punctuation">]class="token punctuation">[class="token number">4class="token punctuation">]class="token punctuation">;
class="token punctuation">}class="token punctuation">;

class="token keyword">inline ostream class="token operator">&class="token keyword">operatorclass="token operator"><<class="token punctuation">(ostream class="token operator">&osclass="token punctuation">, class="token keyword">const Matrix class="token operator">&mclass="token punctuation">)
class="token punctuation">{
    class="token keyword">return mclass="token punctuation">.class="token function">printclass="token punctuation">(osclass="token punctuation">)class="token punctuation">;
class="token punctuation">}

Matrix class="token keyword">operatorclass="token operator">+class="token punctuation">(class="token keyword">const Matrix class="token operator">&m1class="token punctuation">, class="token keyword">const Matrix class="token operator">&m2class="token punctuation">)
class="token punctuation">{
    Matrix class="token function">resultclass="token punctuation">(m1class="token punctuation">)class="token punctuation">;
    result class="token operator">+class="token operator">= m2class="token punctuation">;
    class="token keyword">return resultclass="token punctuation">;
class="token punctuation">}

Matrix class="token keyword">operatorclass="token operator">*class="token punctuation">(class="token keyword">const Matrix class="token operator">&m1class="token punctuation">, class="token keyword">const Matrix class="token operator">&m2class="token punctuation">)
class="token punctuation">{
    Matrix resultclass="token punctuation">;
    class="token keyword">for class="token punctuation">(class="token keyword">int ix class="token operator">= class="token number">0class="token punctuation">; ix class="token operator">< m1class="token punctuation">.class="token function">rowsclass="token punctuation">(class="token punctuation">)class="token punctuation">; ixclass="token operator">++class="token punctuation">)
    class="token punctuation">{
        class="token keyword">for class="token punctuation">(class="token keyword">int jx class="token operator">= class="token number">0class="token punctuation">; jx class="token operator">< m1class="token punctuation">.class="token function">colsclass="token punctuation">(class="token punctuation">)class="token punctuation">; jxclass="token operator">++class="token punctuation">)
        class="token punctuation">{
            class="token function">resultclass="token punctuation">(ixclass="token punctuation">, jxclass="token punctuation">) class="token operator">= class="token number">0class="token punctuation">;
            class="token keyword">for class="token punctuation">(class="token keyword">int kx class="token operator">= class="token number">0class="token punctuation">; kx class="token operator">< m1class="token punctuation">.class="token function">colsclass="token punctuation">(class="token punctuation">)class="token punctuation">; kxclass="token operator">++class="token punctuation">)
            class="token punctuation">{
                class="token function">resultclass="token punctuation">(ixclass="token punctuation">, jxclass="token punctuation">) class="token operator">+class="token operator">= class="token function">m1class="token punctuation">(ixclass="token punctuation">, kxclass="token punctuation">) class="token operator">* class="token function">m2class="token punctuation">(kxclass="token punctuation">, jxclass="token punctuation">)class="token punctuation">;
            class="token punctuation">}
        class="token punctuation">}
    class="token punctuation">}
    class="token keyword">return resultclass="token punctuation">;
class="token punctuation">}

class="token keyword">void Matrixclass="token operator">::class="token keyword">operatorclass="token operator">+class="token operator">=class="token punctuation">(class="token keyword">const Matrix class="token operator">&mclass="token punctuation">)
class="token punctuation">{
    class="token keyword">for class="token punctuation">(class="token keyword">int ix class="token operator">= class="token number">0class="token punctuation">; ix class="token operator">< class="token number">4class="token punctuation">; class="token operator">++ixclass="token punctuation">)
    class="token punctuation">{
        class="token keyword">for class="token punctuation">(class="token keyword">int jx class="token operator">= class="token number">0class="token punctuation">; jx class="token operator">< class="token number">4class="token punctuation">; class="token operator">++jxclass="token punctuation">)
        class="token punctuation">{
            _matrixclass="token punctuation">[ixclass="token punctuation">]class="token punctuation">[jxclass="token punctuation">] class="token operator">+class="token operator">= mclass="token punctuation">._matrixclass="token punctuation">[ixclass="token punctuation">]class="token punctuation">[jxclass="token punctuation">]class="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

ostream class="token operator">&Matrixclass="token operator">::class="token function">printclass="token punctuation">(ostream class="token operator">&osclass="token punctuation">) class="token keyword">const
class="token punctuation">{
    class="token keyword">int cnt class="token operator">= class="token number">0class="token punctuation">;
    class="token keyword">for class="token punctuation">(class="token keyword">int ix class="token operator">= class="token number">0class="token punctuation">; ix class="token operator">< class="token number">4class="token punctuation">; class="token operator">++ixclass="token punctuation">)
    class="token punctuation">{
        class="token keyword">for class="token punctuation">(class="token keyword">int jx class="token operator">= class="token number">0class="token punctuation">; jx class="token operator">< class="token number">4class="token punctuation">; class="token operator">++jxclass="token punctuation">, class="token operator">++cntclass="token punctuation">)
        class="token punctuation">{
            class="token keyword">if class="token punctuation">(cnt class="token operator">&& class="token operator">!class="token punctuation">(cnt class="token operator">% class="token number">8class="token punctuation">)class="token punctuation">)
            class="token punctuation">{
                os class="token operator"><< endlclass="token punctuation">;
            class="token punctuation">}
            os class="token operator"><< _matrixclass="token punctuation">[ixclass="token punctuation">]class="token punctuation">[jxclass="token punctuation">] class="token operator"><< class="token string">' 'class="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}
    os class="token operator"><< endlclass="token punctuation">;
    class="token keyword">return osclass="token punctuation">;
class="token punctuation">}

Matrixclass="token operator">::class="token function">Matrixclass="token punctuation">(elemType a11class="token punctuation">, elemType a12class="token punctuation">, elemType a13class="token punctuation">, elemType a14class="token punctuation">,
               elemType a21class="token punctuation">, elemType a22class="token punctuation">, elemType a23class="token punctuation">, elemType a24class="token punctuation">,
               elemType a31class="token punctuation">, elemType a32class="token punctuation">, elemType a33class="token punctuation">, elemType a34class="token punctuation">,
               elemType a41class="token punctuation">, elemType a42class="token punctuation">, elemType a43class="token punctuation">, elemType a44class="token punctuation">)
class="token punctuation">{
    _matrixclass="token punctuation">[class="token number">0class="token punctuation">]class="token punctuation">[class="token number">0class="token punctuation">] class="token operator">= a11class="token punctuation">, _matrixclass="token punctuation">[class="token number">0class="token punctuation">]class="token punctuation">[class="token number">1class="token punctuation">] class="token operator">= a12class="token punctuation">;
    _matrixclass="token punctuation">[class="token number">0class="token punctuation">]class="token punctuation">[class="token number">2class="token punctuation">] class="token operator">= a13class="token punctuation">, _matrixclass="token punctuation">[class="token number">0class="token punctuation">]class="token punctuation">[class="token number">3class="token punctuation">] class="token operator">= a14class="token punctuation">;
    _matrixclass="token punctuation">[class="token number">1class="token punctuation">]class="token punctuation">[class="token number">0class="token punctuation">] class="token operator">= a21class="token punctuation">, _matrixclass="token punctuation">[class="token number">1class="token punctuation">]class="token punctuation">[class="token number">1class="token punctuation">] class="token operator">= a22class="token punctuation">;
    _matrixclass="token punctuation">[class="token number">1class="token punctuation">]class="token punctuation">[class="token number">2class="token punctuation">] class="token operator">= a23class="token punctuation">, _matrixclass="token punctuation">[class="token number">1class="token punctuation">]class="token punctuation">[class="token number">3class="token punctuation">] class="token operator">= a24class="token punctuation">;
    _matrixclass="token punctuation">[class="token number">2class="token punctuation">]class="token punctuation">[class="token number">0class="token punctuation">] class="token operator">= a31class="token punctuation">, _matrixclass="token punctuation">[class="token number">2class="token punctuation">]class="token punctuation">[class="token number">1class="token punctuation">] class="token operator">= a32class="token punctuation">;
    _matrixclass="token punctuation">[class="token number">2class="token punctuation">]class="token punctuation">[class="token number">2class="token punctuation">] class="token operator">= a33class="token punctuation">, _matrixclass="token punctuation">[class="token number">2class="token punctuation">]class="token punctuation">[class="token number">3class="token punctuation">] class="token operator">= a34class="token punctuation">;
    _matrixclass="token punctuation">[class="token number">3class="token punctuation">]class="token punctuation">[class="token number">0class="token punctuation">] class="token operator">= a41class="token punctuation">, _matrixclass="token punctuation">[class="token number">3class="token punctuation">]class="token punctuation">[class="token number">1class="token punctuation">] class="token operator">= a42class="token punctuation">;
    _matrixclass="token punctuation">[class="token number">3class="token punctuation">]class="token punctuation">[class="token number">2class="token punctuation">] class="token operator">= a43class="token punctuation">, _matrixclass="token punctuation">[class="token number">3class="token punctuation">]class="token punctuation">[class="token number">3class="token punctuation">] class="token operator">= a44class="token punctuation">;
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

Matrixclass="token operator">::class="token function">Matrixclass="token punctuation">(class="token keyword">const elemType class="token operator">*arrayclass="token punctuation">)
class="token punctuation">{
    class="token keyword">for class="token punctuation">(class="token keyword">int ix class="token operator">= class="token number">0class="token punctuation">; ix class="token operator">< class="token number">4class="token punctuation">; class="token operator">++ixclass="token punctuation">)
    class="token punctuation">{
        class="token keyword">for class="token punctuation">(class="token keyword">int jx class="token operator">= class="token number">0class="token punctuation">; jx class="token operator">< class="token number">4class="token punctuation">; class="token operator">++jxclass="token punctuation">)
        class="token punctuation">{
            _matrixclass="token punctuation">[ixclass="token punctuation">]class="token punctuation">[jxclass="token punctuation">] class="token operator">= class="token operator">*class="token punctuation">(arrayclass="token operator">++class="token punctuation">)class="token punctuation">;
        class="token punctuation">}
    class="token punctuation">}
    class="token keyword">returnclass="token punctuation">;
class="token punctuation">}

class="token keyword">int class="token function">mainclass="token punctuation">(class="token punctuation">)
class="token punctuation">{
    Matrix mclass="token punctuation">;
    cout class="token operator"><< m class="token operator"><< endlclass="token punctuation">;

    elemType arclass="token punctuation">[class="token number">16class="token punctuation">] class="token operator">= class="token punctuation">{class="token number">1.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">1.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">,
                       class="token number">0.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">1.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">0.0fclass="token punctuation">, class="token number">1.0fclass="token punctuation">}class="token punctuation">;
    elemType ar2class="token punctuation">[class="token number">16class="token punctuation">] class="token operator">= class="token punctuation">{class="token number">1.3fclass="token punctuation">, class="token number">0.4fclass="token punctuation">, class="token number">2.6fclass="token punctuation">, class="token number">8.2fclass="token punctuation">, class="token number">6.2fclass="token punctuation">, class="token number">1.7fclass="token punctuation">, class="token number">1.3fclass="token punctuation">, class="token number">8.3fclass="token punctuation">,
                        class="token number">4.2fclass="token punctuation">, class="token number">7.4fclass="token punctuation">, class="token number">2.7fclass="token punctuation">, class="token number">1.9fclass="token punctuation">, class="token number">6.3fclass="token punctuation">, class="token number">8.1fclass="token punctuation">, class="token number">5.6fclass="token punctuation">, class="token number">6.6fclass="token punctuation">}class="token punctuation">;

    Matrix class="token function">identityclass="token punctuation">(arclass="token punctuation">)class="token punctuation">;
    cout class="token operator"><< identity class="token operator"><< endlclass="token punctuation">;

    Matrix class="token function">m2class="token punctuation">(identityclass="token punctuation">)class="token punctuation">;
    m class="token operator">= identityclass="token punctuation">;
    cout class="token operator"><< m2 class="token operator"><< endlclass="token punctuation">;
    cout class="token operator"><< m class="token operator"><< endlclass="token punctuation">;

    Matrix class="token function">m3class="token punctuation">(ar2class="token punctuation">)class="token punctuation">;
    cout class="token operator"><< m3 class="token operator"><< endlclass="token punctuation">;

    Matrix m4 class="token operator">= m3 class="token operator">* identityclass="token punctuation">;
    cout class="token operator"><< m4 class="token operator"><< endlclass="token punctuation">;

    Matrix m5 class="token operator">= m3 class="token operator">+ m4class="token punctuation">;
    cout class="token operator"><< m5 class="token operator"><< endlclass="token punctuation">;

    m3 class="token operator">+class="token operator">= m4class="token punctuation">;
    cout class="token operator"><< m3 class="token operator"><< endlclass="token punctuation">;

    class="token keyword">return class="token number">0class="token punctuation">;
class="token punctuation">}

//-----------------------------------------------------------;

//--------------------------------------------2021年7月21日 ----------------------------------------------------


http://www.niftyadmin.cn/n/1663261.html

相关文章

Apache Storm 学习资料

Apache Storm 官方文档中文版

【Git学习笔记】3:远程库版本同步

Git是分布式的&#xff0c;且本质上并无中心一说&#xff0c;只是一般把GitHub或者自己搭的Git远程库当成一个中心仓库。远程库和本地库一样&#xff0c;都是根据.git/目录的内容来知道有哪些版本以及版本的具体改动。 回退和前进的基本操作 Git中的HEAD指针指向的版本就是当…

3月8日学习内容整理:restframework的分页组件

一、分页 1、第一种情况是看第几页&#xff0c;每页显示多少条数据&#xff1a;使用PageNumberPagination内置类 &#xff08;1&#xff09;代码&#xff1a;注意每页显示几条数据的page_size 参数也可以写在配置文件中 from rest_framework.pagination import PageNumberPagin…

Dockerfile使用

在 Docker 中&#xff0c;可以通过 docker build 命令和 Dockerfile 文件来构造自己的 Docker 镜像。 值得注意的是&#xff0c;docker build 命令会递归地将构建整个上下文&#xff08;如&#xff0c;通常是某个本地目录&#xff09;发送给 docker daemon&#xff0c;所以不要…

Essential C++学习笔记及源代码(第5章 面向对象编程风格)

第5章介绍了C语言中使用Class进行类与类之间面向对象的编程的方式 导言&#xff1a;单纯的以对象为基础(object-based)的类机制无法针对同一种类之间的共通性质进行系统化的划分。因为这种单纯地以对象为基础的模型无法让我们更进一步地指出类间的关系。类与类之间的关系要使用…

Spring AOP入门——概念和注意事项

AOP什么&#xff1f; AOP在功能方面&#xff0c;它是之前和之后运行一些业务逻辑&#xff0c;一些操作&#xff08;比方记录日志、或者是推断是否有权限等&#xff09;&#xff0c;这些操作的加入。全然不耦合于原来的业务逻辑。从而对原有业务逻辑全然是透明。 也就是说。这段…

数据结构---树

树的介绍 1. 树的定义 树是一种数据结构&#xff0c;它是由n&#xff08;n>1&#xff09;个有限节点组成一个具有层次关系的集合。 把它叫做“树”是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a;(01) 每…

【Git学习笔记】4:分支的简单使用和合并,禁用Fast-forward

在本地创建和使用分支 Git鼓励使用多分支。 查看当前版本库中的分支 git branch 其中*标注的是当前分支。 创建并切换到分支 git checkout -b 分支名 这时所有的commit都会提交到这个分支上&#xff0c;而不会影响其它分支。 切换分支 git checkout 分支名 合并某分支…