| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 865 人关注过本帖
标题:我这个程序构造函数的参数怎么传不到基类去?
只看楼主 加入收藏
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:4 
我这个程序构造函数的参数怎么传不到基类去?
我这个程序主要功能是求,点point,圆circle,圆柱体cylinder的面积(表面积),不知道为什么在主函数中,通过cylinder的构造函数给这三个类的成员变量初始化,运行时圆柱的面积能算出来,但是圆的面积算不出来(得出的结果是0),半径的值就没给传过去,但是这个半径的值在算圆柱面积时传过去了呀,到底怎么回事啊?
定义类的头文件:
#include <iostream.h>
const double PI=3.14;
class Point
{
protected:
    int x,y;
public:
    virtual void Area()
    {
        cout<<"Error: point have no area!"<<endl;
    }
    Point(int a=0,int b=0)
    {
        x=a;y=b;
        cout<<"Point constructor:"<<x<<','<<y<<endl;
    }
    ~Point(){
        cout<<"Point destructor:"<<x<<','<<y<<endl;
    }
};
class Circle:public Point
{
protected:
    int radius;
    double area1;
public:
    void Area()
    {
        area1=PI*radius*radius;
        cout<<"The circle's area is:"<<area1<<endl;
    }
    Circle(int a=0,int b=0,int r=0):Point(a,b)
    {
        radius=r;
        cout<<"Circle constructor:"<<x<<','<<y<<','<<radius<<endl;
    }
    ~Circle()
    {
        cout<<"Circle destructor:"<<x<<','<<y<<','<<radius<<endl;
    }
};
class Cylinder:public Circle
{
protected:
    int height;
    double area2;
public:
    void Area()
    {
        area2=2*PI*radius*radius+2*PI*radius*height;
        cout<<"The cylinder's area is:"<<area2<<endl;
    }
    Cylinder(int a=0,int b=0,int r=0,int h=0):Circle(a,b,r)
    {
        height=h;
        cout<<"Cylinder constructor:"<<x<<','<<y<<','<<radius<<','<<height<<endl;
    }
    ~Cylinder()
    {
        cout<<"Cylinder destructor:"<<x<<','<<y<<','<<radius<<','<<height<<endl;
    }
};


主函数:
#include "3 82.h"
void main()
{
    Point point,*pa;
    Circle circle;
    Cylinder cylinder(1,2,3,4);
    pa=&point;
    pa->Area();
    pa=&circle;
    pa->Area();
    pa=&cylinder;
    pa->Area();
}


帮忙看一下什么原因造成的,谢谢!!!
搜索更多相关主题的帖子: 参数 构造 基类 函数 
2009-10-22 22:22
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:8 
你的概念没搞清,3个对象实例是不同的实体。

Circle circle;这园的构造函数并没有传递任何参数(你的构造函数是Circle(int a=0,int b=0,int r=0):Point(a,b))。
结果自然是0。

Cylinder cylinder(1,2,3,4);这个只计算它自身。虽然它是从Circle派生的,但他跟Circle circle这个实例对象是两回事。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-22 23:08
乔峰不会
Rank: 1
等 级:新手上路
帖 子:11
专家分:7
注 册:2009-10-21
收藏
得分:7 
Cylinder类继承的是 Circle类的内容,继承后,就把Circle的protect和public类型的成员,变成了自己(Cylinder)类的成员,当调用Cylinder的构造函数时,只是对Cylinder的对象(包含从Circle继承来的成员)进行了初始化,而不是同时把Circle的对象,进行初始化了,两者无关。
       你需要高清继承时,类与对象的关系。
2009-10-23 09:30
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
收藏
得分:0 
回复 2楼 东海一鱼
我想通了,谢谢!
2009-10-23 19:13
yydjtcy
Rank: 1
来 自:中国海洋大学
等 级:新手上路
帖 子:52
专家分:7
注 册:2008-11-25
收藏
得分:0 
回复 3楼 乔峰不会
我想通了,谢谢!
2009-10-23 19:14
快速回复:我这个程序构造函数的参数怎么传不到基类去?
数据加载中...
 
   



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

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