| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 504 人关注过本帖
标题:求救
只看楼主 加入收藏
漫天花雨
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2008-7-13
结帖率:100%
收藏
 问题点数:0 回复次数:2 
求救
程序如下:
#include<iostream.h>
class Shape
{public:
virtual float area()const{return 0.0;}
virtual float volume()const{return 0.0;}
virtual void shapeName()const=0; //纯虚函数//
};
//shapeName函数与派生类密切相关,应当在派生类中定义
//由于Point类中不再对area和volume函数重新定义,因此没有声明为纯虚函数
class Point:public Shape
{
public:
    Point(float,float);
    void setPoint(float,float);
    float getX()const {return x;}
    float getY()const {return y;}
    virtual void shapeName()const{cout<<"Point:";}//对虚函数进行再定义
protected:
    float x,y;
};
Point::Point(float a,float b)
{
    x=a;
    y=b;
}
void Point::setPoint(float a,float b)
{
    x=a;
    y=b;
}

//由于点是没有面积和体积的,因此不必重新定义area和volume
class Circle:public Point
{
public:
    Circle(float a,float b,float r):Point(a,b),radius(r){}
    void setRadius(float r) {radius=r;}
    float getRadius()const;
    virtual float area()const;
    virtual void shapeName()const{cout<<"Circle:";} //对虚函数进行再定义//
protected:
    float radius;
};

float Circle::getRadius()const {return radius;}
float Circle::area()const {return 3.14*radius*radius;}//重新定义area函数


class Cylinder:public Circle
{
public:
    Cylinder(float a=0,float b=0,float r=0,float h=0);
    void setHeight(float);
    virtual float area()const;
    virtual float volume()const;
    virtual void shapeName()const{cout<<"Cylinder: ";} //对虚函数进行再定义//
protected:
    float height;
};
Cylinder::Cylinder(float a,float b,float r,float h):Circle(a,b,r),height(h){}
void Cylinder::setHeight(float h){height=h;}
float Cylinder::area()const
{
    return 2*Circle::area()+2*3.14*radius*height;
}
float Cylinder::volume()const
{
    return Circle::area()*height;
}
void main()
{Point point(3.2,4.5);
 Circle circle(2.4,1.2,5.6);
 Cylinder cylinder(3.5,6.4,5.2,10.5);
 point.shapeName();
 cout<<point.x<<point.y<<endl;
}

错误出在倒数第二行,为什么会出错呢?错出在什么地方了, 另外cout<<point.setPoint()<<endl;为什么也不行呢?请好心人帮忙解答一下 详尽一些 谢谢了
搜索更多相关主题的帖子: return 虚函数 
2008-09-22 08:29
无名小子
Rank: 1
等 级:新手上路
威 望:1
帖 子:30
专家分:0
注 册:2007-8-11
收藏
得分:0 
你继承的是point的public部分,而x,y是定义在protected里面的,当然不能调用!把point里面的protected 去掉,让float x,y;和上面的函数一起成为 public就可以了~~
2008-09-22 10:24
漫天花雨
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2008-7-13
收藏
得分:0 
回复 2# 无名小子 的帖子
哥们基类里面protected里面的内容是可以被派生类调用的 这是书上的定义哦
2008-09-22 16:24
快速回复:求救
数据加载中...
 
   



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

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