注册 登录
编程论坛 C++教室

真的很矛盾···

q345918550q 发布于 2010-04-19 18:58, 569 次点击
#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 编辑 ]
3 回复
#2
cnfarer2010-04-19 19:12
是通过构造函数:ColorBox::ColorBox(double l,double w, double h, int c):Box(l,w,h)来得到的!
#3
debroa7232010-04-19 21:48
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,就可以看到函数进入了基类的构造函数里。
#4
q345918550q2010-05-11 21:49
回复 3楼 debroa723
很详细   谢谢
1