我从一个基础 Shape 类创建了一个派生的 Octagon 类(由Stroustrup..i编写'm using programming principles and practice). The constructor and other methods seem to be fine except that calling the function that modifies the class member doesn' t更改任何内容 .
这是我写的派生类(在基类接口之后):
class Octagon : public Shape
{
public:
Octagon(Point centre, int side_length);
double cot(double x) const{return (cos(x) / sin(x));}
void draw_lines() const;
void set_side(int x) { s_l = x; } //am i missing something?
double rad(int side){return (0.5*side*cot(PI / 8));}
private:
int s_l;
};
Octagon::Octagon(Point centre, int side_length)
:s_l( side_length )
{
for (int ang = 22.5; ang <= 337.5; ang += 45)
{
add(Point{ int(centre.x + rad(s_l) * cos(ang*PI / 180)),
int(centre.y - rad(s_l) * sin(ang*PI / 180)) });
};
}
当我在main函数中调用它时, set_side(int) 函数实际上没有做任何事情......
int main()
{
Simple_window win{ Point{100,100}, 1200, 900, "window" }; //Simple_window class
//designed by Stroustrup to display Shape objects
Octagon oct{ Point(600,450), 100};
oct.set_color(Color::black);
oct.set_side(20); //supposed to change the side length from 100 to 20
//but it stays at 100 when i run the program
win.attach(oct); //attaches Shape object to Simple_window
win.wait_for_button();
}
我不知道这是否是必要的,但这是Stroustrup使用FLTK GUI库设计的基础 Shape 类 .
class Shape { // deals with color and style, and holds sequence of lines
public:
void draw() const; // deal with color and draw lines
virtual void move(int dx, int dy); // move the shape +=dx and +=dy
void set_color(Color col) { lcolor = col; }
Color color() const { return lcolor; }
void set_style(Line_style sty) { ls = sty; }
Line_style style() const { return ls; }
void set_fill_color(Color col) { fcolor = col; }
Color fill_color() const { return fcolor; }
Point point(int i) const { return points[i]; } // read only access to points
int number_of_points() const { return int(points.size()); }
virtual ~Shape() { }
protected:
Shape();
virtual void draw_lines() const; // draw the appropriate lines
void add(Point p); // add p to points
void set_point(int i,Point p); // points[i]=p;
private:
vector points; // not used by all shapes
Color lcolor; // color for lines and characters
Line_style ls;
Color fcolor; // fill color
Shape(const Shape&); // prevent copying
Shape& operator=(const Shape&);
};
顺便说一句, draw_lines() 由 draw() 调用,由显示引擎调用 . (我逐章跟随这本书,所以我还没有达到他完全讨论这一点的章节) .