读书人

C++类继承 protected成员为一个随机值

发布时间: 2012-03-30 17:32:09 作者: rapoo

C++类继承 protected成员为一个随机值?是怎么回事
写了一个求圆锥的类 通过多重继承"圆类"和"高类" 求圆锥的体积 R为圆类的保护成员 high为高类的保护成员
写了行测试代码,运行不正确,跑了个断点看了看 R的值是总是一个随机值 不知道问题出在哪里?
源码如下:
1:main()函数

C/C++ code
#include "stdafx.h"#include "Circle.h"#include "Cone.h"#include "Line.h"int _tmain(int argc, _TCHAR* argv[]){    Circle temp(2);    Line p(12);    Cone tm;    tm.Cone_area();    system("pause");    return 0;}

2:圆类
C/C++ code
#pragma once//#define PI 3.14#include "stdafx.h"class Circle{protected:    int R;public:    Circle(void);    Circle(int r)    {        R = r;    }    double Circle_area()    {        return 3.14*Circle::R*Circle::R;    }public:    ~Circle(void);};

3:高类
C/C++ code
#pragma once#include "stdafx.h"#include "Circle.h"class Line{protected:    int High;public:    Line(void);    Line(int high)    {        High = high;    }    public:    ~Line(void);};

4:圆锥类
C/C++ code
#pragma once#include "stdafx.h"#include "Circle.h"#include "Line.h"class Cone : public Circle,public Line{public:    Cone(void);    void Cone_area()    {        cout<<"圆锥的体积为:"<<Circle::Circle_area()*Line::High/3<<endl;    }public:    ~Cone(void);};

求指点!~

[解决办法]
Cone tm;
你都给设置。显然R的值是随机的。

tm.R = xx;
tm.High = xx;

构造函数中加参数。或基类提供设置方法

另外你这个不该用继承的
[解决办法]
其实你看
高 只是一个普通的属性类。 这个类和int height有什么区别?

所以在设计上别弄那么复杂。直接 圆+int height 就可以做圆锥了。

从抽象角度来说,我觉得吧
[解决办法]
顶楼上和楼上的楼上,你何必做这么复杂,又不需要用圆这个类何必呢!?

读书人网 >C++

热点推荐