Помогите написать конструктор

swimmerira

Такая проблема!
Хотела написать два примитивных объекта - точку и линию.
С точкой проблем не возникло, а вот написать грамотно конструктор для линии, чтобы инициализировать ее по двум точкам никак не могу. Как сделать так, чтобы конструктор производного класса воспринял объекты базового при своей инициализации если это вообще возможно.
Заранее спасибо!
Ниже листинг с обоими классами.
class Point
{
int a;
int b;
public:
Point(int x, int y){ a=x; b=y;};
};
class Line: public Point
{
int a2;
int b2;
public:
Line (Point p1(x,y Point p2(x2, y2; // как написать конструктор с параметрами p1
//и p2 ?
};

freezer

class Line: public Point
{
int a2;
int b2;
public:
Line (Point p1, Point p2):Point(p1 a2(p2.a b2(p2.b){}
};

Dasar

Наследовать линию от точки - это нарушение правил объектного проектирования, т.к. линия не является расширением точки.
В данном случае, лучше сделать композицию, чем наследование


class Line
{
public:
Point p1;
Point p2;
Line (Point p1, Point p2)
{
this.p1 = p1;
this.p2 = p2;
}
Line (int x1, int y1, int x2, int y2)
{
this.p1.x = x1;
this.p1.y = y1;
this.p2.x = x2;
this.p2.y = y2;
}
}

Dasar

Ты зачем девушку плохому учишь?

freezer

1. просили конструктор сделать для класса, а не класс отнаследовать
2. Линия - это такая точка, которая имеет длину и ориентацию
3. На ней не написано что она девушка

freezer

Line (Point p1, Point p2)
{
this.p1 = p1;
this.p2 = p2;
}

у тебя для Point'ов вызывается default-конструктор, а затем - оператор присваивания, что не есть good в общем случае

Dasar

Глупости говоришь.
Ты где это видел компилятор, который так себя ведет?

ppplva

gcc 3.3.3

ppplva

Не получается ответить на предыдущий пост.
p.a и p.b объявлены как private, их нельзя читать из класса Line.
Оставить комментарий
Имя или ник:
Комментарий: