永发信息网

C++编程:虚函数与多态性

答案:1  悬赏:80  手机版
解决时间 2021-07-16 20:55

#include<iostream>
#include<iomanip>
using namespace std;
class Matrix{
private:
SetValue int X;unsigned int y;
static int ObjectAliveNo;
int a,b;
public:
unsigned int **pMatrix;
Matrix(unsigned int x,unsigned int y){
a=x;b=y;
int **pMatrix=new int *[y];
for(int i=0;i<x;i++)
pMatrix[i]=new int[y];
cout<<"矩阵的行数:"<<x<<endl;
cout<<"矩阵的列数:"<<y<<endl;
for(i=0;i<x*y;i++)
{cin>>**pMatrix;
*pMatrix++;}
++ObjectAliveNo;
}
Matrix(){}
~Matrix(){--ObjectAliveNo;}
int getx(){return a;}
int gety(){return b;}


};
int Matrix::ObjectAliveNo=0;


void Mul(Matrix a,Matrix b){
int t,i,j,x,y,p[80];
int c=0;
i=a.getx();j=a.gety();x=b.getx();y=b.gety();
if(j!=x)
exit(1);
else
for(int e=0;e<i;e++)
for(int f=0;f<y;f++)
{for(int g=0;g<j;g++)
t+=a.pMatrix[i][j]*b.pMatrix[j][y];

p[c]=t;c++;

t=0;}
cout<<"输出相乘后的矩阵:"<<endl;
for(c=0;c<i*y;c++)
{if(c%i==0)
cout<<endl;
cout<<setw(2)<<p[c];
}
cout<<endl;
}
void main(){
Matrix a(2,2),b(2,2);
Mul(a,b);

}1. 重载运算符“*”,实现对以上实验实现的矩阵类的对象的相乘。

2. 定义一个类BaseFly,该类中有一个Fly()函数。

3. 定义三个类BirdFly、DragonFly、PlaneFly,都集成来自BaseFly,并重载Fly()函数。

4. 用各类指针调用各个类的对象的Fly()函数,体会继承中的多态性。

5. 将BaseFly::Fly()函数声明为virtual,体会需函数在多态性中的作用。

三.实验方法与步骤

1. 重载运算符“*”进行矩阵相乘,相乘的算法代码请参考实验3中的Mul()函数。这里给出一个示例,在矩阵相乘之前要检查两个矩阵是否可以相乘,之后根据矩阵相乘的定义返回一个新的矩阵。

//---------------------------------------------------------------------------------------------------

Matrix Matrix::operator*(Matrix &m)

{

if(iMaxy!=m.iMaxx)//check the validity

{

cout<<"\nCannot multipiy Matrix a with b!\n";

return *this;

}

int ix,iy,iz;

Matrix c(iMaxx,m.iMaxy);

for(ix=0;ix<iMaxx;ix++)

for(iy=0;iy<m.iMaxy;iy++)

{

c.pMatrix[ix][iy]=0;

for(iz=0;iz<iMaxy;iz++)

{

c.pMatrix[ix][iy]+=pMatrix[ix][iy]*m.pMatrix[ix][iy];

}

}

return c;

}

//---------------------------------------------------------------------------------------------------

2. 下面提供一个体会继承中的多态性和虚函数在多态性中的作用的题目。请根据提示进行实验。定义类BaseFly()函数输出特定内容。例如:

//---------------------------------------------------------------------------------------------------

class BaseFly

{

public:

void Fly()

{ cout<<"\n-------Class BaseFly::Fly()------\n"; }

};

//---------------------------------------------------------------------------------------------------

3. 定义类BirdFly、DragonFly和PlaneFly,都继承自BaseFly,重载Fly()函数使得各类中的Fly()函数分别输出不同的内容。

//---------------------------------------------------------------------------------------------------

class BirdFly:public BaseFly

{

public:

void Fly(){cout<<"\n------ Class BirdFly::Fly()-----\n";}

};

Class DragonFly:public BaseFly

{

public:

void Fly(){cout<<"\n------ Class DragonFly::Fly()-----\n";}

};

class PlaneFly:public BaseFly

{

public:

void Fly(){ cout<<"\n------ Class PlaneFly::Fly()-----\n";}

};

//---------------------------------------------------------------------------------------------------

4. 在main函数中,用“new”关键字分配出以上四个类的实例,调用各个例的Fly()函数测试多太性。请参考以下代码:

//---------------------------------------------------------------------------------------------------

int main()

{

cout<<"\n测试继承中的多态性(Virtual):\n";

BaseFly *pBase;

BirdFly *pBird=new Bird();

PBase=pBird;

cout<<"\nBirdFly->\n";

PBase->Fly();

DragonFly *pDragon=new DragonFly();

Pbase=pDragon;

Cout<<"\n DragonFly->\n";

PBase->Fly();

PlaneFly *pPlane=new PlaneFly();

Pbase= pPlane;

Cout<<"\n PlaneFly->\n";

PBase->Fly();

return 0;

}

//---------------------------------------------------------------------------------------------------

5. 将BaseFly::Fly()声明为virtual,在main()中定义BaseFly的指针:* Pbase,依次分别指向BirdFly、DragonFly和PlaneFly,并调用各类的Fly()函数,体会需函数作用。

//---------------------------------------------------------------------------------------------------

BaseFly* Pbase=new BaseFly;

BirdFly* pBird=new BirdFly

Pbase=pBird;

最佳答案
你好 楼主。

很幸运的看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
可能是你问的问题有些专业了,没人会。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
希望我的回答也能够帮到你!
祝你好运。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问数学高手:假设一个椭圆和一个圆面积一样
这个能卖多少呢
我下载了QQ拼音,为什么没有积分啊?
企业管理有哪些大学适合跨专业考研哈
为什么我用虚拟机扫描不了IP
写古代言情小说的技巧
DNF福建2区+10的贤者戒多少钱16智
人每天喝多少水最好!
我刚刚安装了 Vista 可是在其他设备 那里显示
为什么天这么兰?
梦幻诛仙京城任务空桑寻找想不想中彩票得3.6
穿越多少级顶级
这个怎么翻译..日文和法语
开通财富通???
这个电脑配置垃圾么?
推荐资讯
打不到篮球这么办?
怎么样能点亮
大神,我想要好看的耽美动画!你可以发给我吗
下载反恐精英online到手机内存卡里
喜欢上一个人到底是什么感觉
迈克尔杰克逊:谢幕绝唱这部电影的片尾曲是什
国际油价上涨对哪些A股利好
玫琳凯美容顾问!
与同事相处不好怎么办?
穿越火线执行失败怎么办?
極品飛車9的程序問題
华工的材料学专业怎么样?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?