问答题

[说明] ①为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员 radius。将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。 ②为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序 Circle c; c. SetRadius(5); c. Print(); 将输出:The circle has radius of 5! ③完成友元函数void CompareR(Circle *c1,Circle *c2)的定义,在屏幕中输出c1与c2比较radius大小结果,要求使用if - else结构完成。 输出结果如下: The circle has radus of 5 ! The circle has radius of 10 ! cl <c2 源程序文件test7_3, cpp 清单如下: #include < iostream, h > class Circle { public: Circle( ) :radius(5) {} (1) void SetRadius(int r) { radius = r; } int GetRadius() { return radius; } (2) friend void CompareR(Circle * c1,Circle * c2); private: int radius; }; void CompareR(Circle * c! ,Circle * c2) { (3) cout << "c1 > c2" << endl; else if ( (c1 -> GetRadius( )) == (c2 -> GetRadius( ))) tout < <"c1=c2’ < < endl; else if ( (c1 -> GetRadius( )) < ( c2 -> GetRadius( ))) cout <<"c1<c2" <<endl; void main( ) Circle c1 c1. SetRadius(5) c1. Print( ) Circle c2(10); c2. Print( ) CompareR(&c1 ,&c2); }

【参考答案】

(1)Circle(int rad):radius(rad){} (2)void Print(){cout< <"The......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
[预备知识]①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如图3所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)(见表5)。结构数组HT的类型定义如下:#define MAXLEAFNUM 20struct node {char ch; * 当前结点表示的字符,对于非叶子结点,此域不用* int weight; * 当前结点的权值* int parent; * 当前结点的父结点的下标,为0时表示无父结点* int Ichild, rchild *当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点* } Ht[2 * MAXLEAFNUM];②用’0’或’1’标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用’0’(’1’)标识该分支(示例如图3所示)。③若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由’0’、’1’组成的一个序列,称此序列为该叶子结点的前缀编码。如图3所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。【函数5.1说明】函数void LeafCode (int root, int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参 n为叶子结点个数。在构造过程中,将Ht[p]. weight域用作被遍历结点的遍历状态标志。【函数5.1】char * * Hc;void LeafCode (int root, int n){ *为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标* int i,p = root,cdlen =0;char code[20];Hc=(char* * )malloc(.(n +]) *sizeof(char* )); * 申请字符指针数组* for(i=1;i< =p;++i)Ht[ i]. weight =0; * 遍历最优二叉树时用作被遍历结点的状态标志* while(p) { *以非递归方法遍历最优二叉树,求树中每个叶子结点的编码* if(Ht[p], weight ==0) { *向左* Ht[ p]. weight =1if (Ht[p],lchild !=0) { p=Ht[P].lchild; code[cdlen++] =’0’;]else if (Ht[p]. rchild ==0) { * 若是叶子结点,则保存其前缀编码* Hc[p] = ( char * ) malloc( (cdlen + 1 ) * sizeof (char) );(1) ; strcpy(He[ p] ,code);}}else if (Ht[ pi, weight == 1) { *向右* Ht[p]. weight =2;if(Ht[p].rchild !=0) {p=Ht[p].rchild; code[cdlen++] =’1’;}}else{ * Ht[p]. weight ==2,回退* Ht[p]. weight =0;p= (2) ; (3) ; *退回父结点* }} * while结束* }【函数5.2说明】函数void Decode(char*buff, int root)的功能是:将前缀编码序列翻译成叶子结点的字符序列并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。【函数5.2】void Decode( char * buff, int root)Iint pre =root,p;while ( * buff! = ’ 0’) {p = root;while (p!=0){ *存在下标为p的结点* pre=p;if( (4) )p=Ht[p].lchild; *进入左子树* else p = Ht[p]. rchild; *进入右子树*. buff ++; * 指向前缀编码序列的下一个字符* }(5) ;printf( %c , Ht [ pre]. ch);}}