| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 568 人关注过本帖
标题:真的很矛盾···
只看楼主 加入收藏
q345918550q
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2010-3-28
结帖率:30%
收藏
 问题点数:0 回复次数:3 
真的很矛盾···
#include <iostream>
using namespace std;
class Box                                //基类的定义
{
private:
    double length;                    //长度,为私有成员
public:
    double width;                        //宽度,为公有成员
protected:
    double height;                    //高度,为受保护成员
public:
    Box(double l,double w, double h);        //基类构造函数
    double get_length(){ return length; }    //返回长度的值
    double get_width(){ return width; }    //返回宽度的值
    double get_height(){ return height; }    //返回高度的值
    double volume();                    //计算体积
};

Box::Box(double l,double w, double h)
{
    length=l;
    width=w;
    height=h;
}

double Box::volume()
{
    return length*width*height;
}

class ColorBox :public Box                //派生类,公有继承Box
{
private:
    //颜色值,0表示黑色,1表示红色,2表示绿色,3表示蓝色,4表示白色
    int color;
public:
    ColorBox(double l,double w, double h, int c);    //派生类构造函数
    int get_color(){ return color; }                //返回颜色的值
};
//类的实现
ColorBox::ColorBox(double l,double w, double h, int c):Box(l,w,h)
{
    color=c;
}

void main()
{
    ColorBox mycolorbox(10,20,30,1);
    cout<<"盒子的长度: "<<mycolorbox.get_length()<<endl;   
    cout<<"      宽度: "<<mycolorbox.get_width()<<endl;   
    cout<<"      高度: "<<mycolorbox.get_height()<<endl;   
    cout<<"      颜色: "<<mycolorbox.get_color();
    cout<<"  (0表示黑色,1表示红色,2表示绿色,3表示蓝色,4表示白色)"<<endl;
    cout<<"      体积: "<<mycolorbox.volume()<<endl;   
}

请问子类ColorBox的构造函数是如何传递数值给基类的length?
我的课本是这样说的:   公有继承后,对派生类来说具有不可访问性,即派生类的成员函数和派生类对象在类外均无权访问该类成员
那你ColorBox的构造函数是派生类的成员函数,那它怎么可以把数值传达给length呢?(不是说:派生类的成员函数和派生类对象在类外均无权访问该类成员)

[ 本帖最后由 q345918550q 于 2010-4-19 19:12 编辑 ]
搜索更多相关主题的帖子: 矛盾 
2010-04-19 18:58
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
是通过构造函数:ColorBox::ColorBox(double l,double w, double h, int c):Box(l,w,h)来得到的!

★★★★★为人民服务★★★★★
2010-04-19 19:12
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
ColorBox mycolorbox(10,20,30,1);
当代码执行到这里时,首先调用的是基类的构造函数,调用基类的那一个构造函数是由
ColorBox::ColorBox(double l,double w, double h, int c):Box(l,w,h)
这里决定的,后面的Box(l,w,h)要求使用构造函数
Box(double l,double w, double h);
这样l,w,h被传入到基类。
从该构造函数返回时,再调用子类的构造函数
你可以再
ColorBox::ColorBox(double l,double w, double h, int c):Box(l,w,h)
{
    color=c;
}
函数的'{' 地方加一个断点,调试到这里时,按下F11,就可以看到函数进入了基类的构造函数里。
2010-04-19 21:48
q345918550q
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2010-3-28
收藏
得分:0 
回复 3楼 debroa723
很详细   谢谢
2010-05-11 21:49
快速回复:真的很矛盾···
数据加载中...
 
   



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

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