标题:为啥不能 class Line:public Point 继承呢?
只看楼主
慢跑20
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-23
结帖率:0
已结贴  问题点数:20 回复次数:4 
为啥不能 class Line:public Point 继承呢?
定义一个Shape抽象类,建立一个point类,表示平面中的一个点;建立一个line类,表示平面中的一条线段,内含两个point类的对象;建立triangle类,表示一个三角形,内含三个line类的对象构成一个三角形,确定派生关系,编制相应程序输出相关信息,设计triangle类的成员函数完成三条边是否能构成三角形的检验和三角型面积计算,输出相关信息。
 shape类好像没什么意义吧,我定义了一个空类。
 class Line  必须单独定义,如果用继承:class Line:public Point,就会提示什么构造函数?
 这个题与一般提不同之处就在于:不仅仅是继承,2、3个基类的对象构成派生类。(2个点对象构成一个线,3个线对象构成一个三角形)。
 为啥不能class Line:public Point继承呢?
 
#include<iostream>
 #include<string>
 #include<math.h>
 using namespace std;
 class Shape
 {public:
 };
 class Point:public Shape
 {public:
 Point(float a,float b)
 {x=a;y=b;}
 void setPofloat(float a,float b)
 {x=a;y=b;}
 float x,y;
 };
 class Line//:public Point
 {public:
 Line(float a1,float b1,float a2,float b2):
 p1(a1,b1),p2(a2,b2){};
 double length()
 { return (sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y))); }
 void setline(){
 cin>>p1.x>>p1.y>>p2.x>>p2.y;
 }
 protected:
 Point p1,p2;
 };
 class Triangle
 {
 public:
 Triangle(float a1,float b1,float a2,float b2,   float a3,float b3,float a4,float b4   ,float a5,float b5,float a6,float b6):
    l1(a1,b1,a2,b2), l2(a3,b3,a4,b4) ,  l3(a5,b5,a6,b6){};
 float delta(){
   d1=l1.length();
   d2=l2.length();
   d3=l3.length();
   if((d1+d2>d3)&&(d2+d3>d1)&&(d3+d1>d2))
         return 1;
 else
   return 0;
    }
 void sett(){
 cout<<"输入3条线的6个点的坐标(12个数字)"<<endl;
 l1.setline();
 l2.setline();
 l3.setline();
 cout<<"3条线的长度分别为:"<<endl;
 cout<<l1.length()<<", "<<l2.length()<<", "<<l3.length()<<"."<<endl;
 if
  (  (l1.length()+l2.length()>l3.length()) && (l2.length()+l3.length()>l1.length()) &&(l3.length()+l1.length()>l2.length()) )
 {  cout<<"恭喜!您输入的这几个点可以组成三角形"<<endl;
 double p=(l1.length()+l2.length()+l3.length())/2;
 double s=sqrt(p*(p-l1.length()) * (p-l2.length()) *(p-l3.length())  );
 cout<<"三角形的面积:"<<s<<endl;
 }
 else cout<<"您输入的这几个点不可以构成三角形"<<endl; }
 
protected:
 Line l1,l2,l3;
 float d1,d2,d3;
 };
 float main()
 {
 Triangle t1(0,0,1,1, 1,2,3,4 ,   4,5,6,7);
 float whether=t1.delta();
 if(whether) cout<<"(0,0)(1,1),(1,2),(3,4),(4,5),(6,7)这几个点组成的3条线段可以构成三角形"<<endl;
 else cout<<"(0,0)(1,1),(1,2),(3,4),(4,5),(6,7)这几个点不可以构成三角形"<<endl;
 t1.sett();
   
 return 0;
 }
搜索更多相关主题的帖子: triangle public 三角形 平面 
2014-05-11 21:37
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:7 
class Line:public Point
我不看你的代码
线从点继承本身就是设计不合理

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2014-05-13 14:54
慢跑20
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-23
得分:0 
回复 2 楼 peach5460
哦,线由2个点对象构成,这样的情况不能用继承啊。。   那这个题应该用线,三角等继承shape吧?
2014-05-13 16:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:7 
關鍵是你打算怎麽描述一條直線?

授人以渔,不授人以鱼。
2014-05-14 12:31
xiaodu000
Rank: 2
来 自:黑龙江七台河
等 级:论坛游民
帖 子:52
专家分:42
注 册:2013-10-15
得分:7 
你的继承写的超乱,看了大半天,类要封装和留出接口,哪有在成员函数里写cin的,真是头一次见,另外抽象类是限定了派生类必须包含的成员的类,就是公共属性什么的,呵呵,希望楼主能好好学习,早日成材

写问题的同学不要手懒,有时候编译器说的东西胜过任何大牛!
2014-05-15 10:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-431388-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.213528 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved