}
29.下面给出了矩阵类Matrix定义。
为了求两个矩阵对象的乘积,需要定义一个Matrix的友元函数Multiply()。
请按照友元函数Multiply()的声明编写出该函数的定义。
classMatrix{
public:
Matrix(introw,intcol);//构造一个具有row行col列的矩阵
~Matrix(){delete[]mem;}//析构函数
friendboolMultiply(Matrix&m1,Matrix&m2,Matrix&m3);
//定义Multiply()为友元函数,该函数把m1×m2的值赋给m3
//其他成员函数从略
private:
int*mem;//动态申请矩阵空间
constintrows,cols;//矩阵的行数和列数
};
Matrix:
:
Matrix(introw,intcol):
rows(row),cols(col)
{
mem=newint[row*col];
}
boolMultiply(Matrix&m1,Matrix&m2,Matrix&m3)
{
//确定矩阵是否能够进行相乘
if(m1.rows!
=m3.rows||m2.cols!
=m3.cols||m1.cols!
=m2.rows)returnfalse;
//定义sum变量,用于计算乘积矩阵m3中每个元素的值
intsum;
//请在下面编写剩余部分
}
30.已知类定义如下,其中Shape为基类,Circle和Rectangle分别Shape的直接派生类,Square为Rectangle的直接派生类和Shape的间接派生类。
请模仿Circle类,写出Rectangle类的所有成员函数。
/******************文件shape.h*************************/
constfloatPI=3.14159f;//定义圆周率常量
classShape//几何图形抽象类
{
public:
virtualfloatGetPerimeter()=0;//纯虚函数,计算周长
virtualfloatGetAre()=0;//纯虚函数,计算面积
};
classCircle:
publicShape//圆类
{
public:
Circle(floatrad):
rad(rad){}
~Circle(){}
floatGetPerimeter(){return2*PI*rad;}//计算圆形周长
floatGetAre(){returnPI*rad*rad;}//计算圆形面积
private:
floatrad;//圆的半径
};
classRectangle:
publicShape//矩形类
{
public:
//在下面编写每个成员函数
private:
floatlength,width;//矩形的长和宽
};
classSquare:
publicRectangle//正方形类
{
public:
Square(floatlen):
Rectangle(len,len){}
~Square(){}
};
31.已知类定义如下,其中Shape为基类,Circle和Rectangle分别Shape的直接派生类,Square为Rectangle的直接派生类和Shape的间接派生类。
请模仿Rectangle类,写出Circle类的所有成员函数。
/******************文件shape.h*************************/
constfloatPI=3.14159f;//定义圆周率常量
classShape//几何图形抽象类
{
public:
virtualfloatGetPerimeter()=0;//纯虚函数,计算周长
virtualfloatGetAre()=0;//纯虚函数,计算面积
};
classRectangle:
publicShape//矩形类
{
public:
Rectangle(floatlen,floatwid):
length(len),width(wid){}
~Rectangle(){}
floatGetPerimeter(){return2*(length+width);}//计算矩形周长
floatGetAre(){returnlength*width;}//计算矩形面积
private:
floatlength,width;//矩形的长和宽
};
classCircle:
publicShape//圆类
{
public:
//在下面编写每个成员函数
private:
floatrad;//圆的半径
};
classSquare:
publicRectangle//正方形类
{
public:
Square(floatlen):
Rectangle(len,len){}
~Square(){}
};
程序设计参考解答
1.若采用for循环编写程序,则如下所示:
voidmain()
{
inti=0;doubles=0;
while(s<5)s+=double
(1)/++i;
cout<<"n="<
}
#include
voidmain()
{
inti;doubles=0;
for(i=1;s<5;i++)s+=1.0/i;
cout<<"n="<//注意:
此i-1的值为所求的n值
}
2.#include
voidmain()
{
inti;//用i作为循环变量
intp=1;//用p作为累乘变量
ints=1