c++的答案

三、阅读程序,按要求作答下列程序中,类B1,B2虚继承类A,类C多继承B1,B2.按题目要求作答。#include<iostream.h>classA//长度x,y{pu... 三、阅读程序,按要求作答
下列程序中,类B1,B2虚继承类A,类C多继承B1,B2. 按题目要求作答。
#include<iostream.h>
class A //长度x,y
{ public:
double x,y;
A(double px=1,double py=1):x(px),y(py){ }
virtual ~A( ){ }
void show( ){cout<<"[A ]=>"<<x<<","<<y<<endl;}
} ;
class B1: virtual public A //矩形面积
{ public :
B1(double px=2, double py=2):A(px,py){ }
void show(){cout<<"[B1]=>"<<x*y<<endl;}
} ;
class B2: virtual public A //梯形面积
{ public:
double z;
B2(double px=3, double py=3, double pz=3):A(px,py),z(pz){}
void show(){cout<<"[B2]=>"<<0.5*(x+y)*z<<endl;}
} ;
class C: public B1, public B2 //体积
{ public:
double h;
C(double px=4,double py=4,double pz=4,double ph=4):B2(px,py,pz),h(ph){}
void show(){cout<<"[C ]=>"<<x<<","<<y<<"/"<<x*y*h<<"/"<<0.5*(x+y)*z*h<<endl;}
} ;
void main()
{ A a; B1 b1; B2 b2; C c;
A* p=&a; p->show( );
p=&b1; p->show( );
p=&b2; p->show( );
p=&c; p->show( );
}
1)写出上述程序的运行结果
2)在类A的show函数之前加上关键字virtual,再写出上述程序的运行结果。
3)在上问基础上,于原main 函数的末尾添加 ((B2)c).show( ); 结果将多显示一行:
4)把类A的show函数改写成纯虚函数。
5)若类A的show函数改写成纯虚函数,原来的main函数不能正常运行,为什么?请简单说明理由。
四、程序改错题:指出下列程序的错误,并说明原因
1、#include <iostream.h>
class A{
public:
void A(int i=0){m=i;}
void show(){cout<<m;}
void ~A(){}
void SetValue(int i){m+=i;}
private:
int m;
};
void main()
{
A a(5);
a.m+=10;
a.show();
}
2、 #include <iostream.h>
class A
{ public:
void setA(int);
void showA( );
private:
int a;
};
class B
{ public:
void setB(int);
void showB( );
private:
int b;
};
class C : public A, private B
{ public:
void setC(int, int, int);
void showC( );
private:
int c;
};
void A::setA(int x)
{ a=x; }
void B::setB(int x)
{ b=x; }
void C::setC(int x, int y, int z)
{ SetA(x);
SetB(y);
c=z;
}
int main( )
{ C obj;
obj.setA(5);
obj.showA( );
obj.setC(6,7,9);
obj.showC( );
obj.setB(6);
obj.showB( );
return 0;
}五、程序设计题
以点(point)类为基类,重新定义矩形类和圆类。点为直角坐标系中的点,矩形水平放置,由左下方的顶点和长宽定义。圆由圆心和半径定义。派生类操作判断任一坐标点是在图形内,还是在图形的边缘上,还是在图形外。缺省初始化图形退化为点。要求包括拷贝构造函数。编程测试类设计是否正确。
展开
 我来答
dongdongzoo9
推荐于2016-09-07 · TA获得超过152个赞
知道答主
回答量:42
采纳率:0%
帮助的人:61.7万
展开全部
一.
1)[A]=>1,1
[A]=>2,2
[A]=>3,3
[A]=>1,1
2) [A]=>1,1
[B1]=>4
[B2]=>9
[C]=>1,1/4/16
3) [B2]=>4
4) 不行,在定义了纯虚函数后A为抽象类,不可以在main中被实例化。

四.
1.a.m私有成员不能在main函数中被访问。
2.因为是私有继承,C不能访问B的成员函数SetB(),起对象也不能在main函数中调用B中的函数。

五.
#include<iostream>
#include<cmath>
using namespace std;

class point
{
public:
point(){}
point(float i,float j){x=i;y=j;}
point(point& c);
~point(){}
protected:
float x,y;
};

point::point(point &c)
{
x=c.x;
y=c.y;
}

class rectangle:public point
{
public:
rectangle(float a,float b,float c,float d):point(a,b)
{
len=c;
wid=d;
}
rectangle(rectangle& c);
~rectangle(){}
void judge(float a,float b);
private:
float len,wid;
};

rectangle::rectangle(rectangle &c):point(c)//在初始化列表中调用积累的拷贝构造函数
{
len=c.len;
wid=c.wid;
}

void rectangle::judge(float a, float b)
{
if((a>x||x+len>a)&&(b>y||y+len>b))
{
cout<<"The point is in the rectangle!"<<endl;
}
else if(a==x||a==x+len||b==y||b==y+wid)
{
cout<<"The point is ont the edge of the rectangle!"<<endl;
}
else
{
cout<<"The point is out of the rectangle!"<<endl;
}
}

class circle:public point
{
public:
circle(float a,float b,float c):point(a,b){r=c;}
circle(circle& c);
~circle(){}
void judge(float a,float b);
private:
float r;
};

circle::circle(circle& c):point(c)
{
r=c.r;
}

void circle::judge(float a,float b)
{
if((pow((a-x),2)+pow((b-y),2))>pow(r,2))
{
cout<<"The point is out of the circle!"<<endl;
}
else if((pow((a-x),2)+pow((b-y),2))==pow(r,2))
{
cout<<"The point is on the circle!"<<endl;
}
else{
cout<<"The point is in the circle!"<<endl;
}
}

int main()
{
point a(3,4);
rectangle s(1,2,5,3);
s.judge(2,3);
circle c(0,0,5);
c.judge(4.3,2.4);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式