| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 429 人关注过本帖
标题:继承与派生的程序编译没错误,运行出错,求解
只看楼主 加入收藏
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:5 
继承与派生的程序编译没错误,运行出错,求解
#include<iostream>
using namespace std;
const double PI=3.14159;
class Point
{
    protected:
        double x,y;
    public:
        Point(double xv,double yv){ x=xv; y=yv;}
        double Area(){ return 0;}
        void show()
        {
            cout<<"x="<<x<<' '<<"y="<<y<<endl;
        }
};

class Circle:public Point
{
        double radius;
    public:
        Circle(double xv,double yv,double vv):Point(xv,yv)
        {
            radius=vv;
        }
        Circle(Circle &Cir):Point(Cir)
        {
            radius=Cir.radius;
        }
        double Getradius(){    return radius;}
        double Area(){    return PI*radius*radius;}
        void show()
        {
            cout<<"x="<<x<<' '<<"y="<<y<<' '<<"radius="<<radius<<endl;
        }
};

class Cylinder:public Circle
{
    private:
        double h;
    public:
        Cylinder(double xv,double yv,double vv,double xx):Circle(xv,yv,vv)
        {
            h=xx;
        }
        double Area() { return (2*Area()+2*PI*Getradius()*h); }
        Cylinder(Cylinder &p):Circle(p) { h=p.h; }
        void show()
        {
            cout<<"x="<<x<<' '<<"y="<<y<<' '<<"radius="<<Getradius()<<' '<<"h="<<h<<endl;
        }
};

void main()
{
    Point p(1,2);
    cout<<"点的面积="<<p.Area()<<endl;
    p.show();
    Circle c1(1,2,3),c2(c1);
    cout<<"圆的面积="<<c2.Area()<<endl;
    c2.show();
    Cylinder c3(1,2,3,2),c4(c3);
    cout<<"圆柱的面积="<<c4.Area()<<endl;
    c4.show();
}
运行截图:
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 子楠 于 2013-4-9 17:28 编辑 ]
搜索更多相关主题的帖子: include public double return 
2013-04-09 17:05
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:5 
     void show()
        {
            cout<<"x="<<x<<' '<<"y="<<y<<' '<<"radius="<<radius<<endl;
        }

基类的私有成员 在派生类中只能通过基类接口访问 不能直接访问
派生类能直接访问的基类成员 只有public和protected成员

人生是一场错过 愿你别蹉跎
2013-04-09 17:19
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
收藏
得分:0 
回复 2楼 fanpengpeng
x,y是保护的,radius是自己的可以调用啊,那里没有错误,就是派生出的圆柱类那里出问题了
2013-04-09 17:24
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
class Cylinder:public Circle
{
    private:
        double h;
    public:
        Cylinder(double xv,double yv,double vv,double xx):Circle(xv,yv,vv)
        {
            h=xx;
        }
        double Area() { return ([color=#0000FF]2*Area()+2*PI*Getradius()*h); }[/color]
        Cylinder(Cylinder &p):Circle(p) { h=p.h; }
        void show()
        {
            cout<<"x="<<x<<' '<<"y="<<y<<' '<<"radius="<<Getradius()<<' '<<"h="<<h<<endl;
        }
};

这里Area()的不小心调用构成了无穷递归了 按你的意思 要调用Circle类的这个方法
所以这样改一下
double Area() { return (2*Circle::Area()+2*PI*Getradius()*h); }

人生是一场错过 愿你别蹉跎
2013-04-09 17:36
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
不好意思啊 看的太着急了 没仔细看

人生是一场错过 愿你别蹉跎
2013-04-09 17:37
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
收藏
得分:0 
回复 5楼 fanpengpeng
奥,没事。。恩恩,对了,非常感谢
2013-04-09 17:52
快速回复:继承与派生的程序编译没错误,运行出错,求解
数据加载中...
 
   



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

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