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日 ----------------------------------------------------