Это, как вы это делаете:
Point px;
Point py;
Point pz;
Triangle trig(px, py, pz);
trig
будет объект, который является экземпляром класса Triangle
и выше, будет вызывать конструктор с 3-мя аргументами Поинт.
Другой способ для указателей:
Triangle *pTrig = new Triangle(pX, pY, pZ);
Кроме того, я полагаю, что это было бы лучше:
Triangle::Triangle()
: A(NULL), B(NULL), C(NULL)
{
}
Triangle::Triangle(const Point& X,const Point& Y, const Point& Z)
: A(new Point(X)), B(new Point(Y)), C(new Point(Z))
{
}
Предполагая, что точка имеет конструктор копирования.
Вы хотите вызвать его изнутри функции operator>>
для обновления аргумента T, но это не сработает, потому что вы не можете вызвать конструктор на том, что уже построено. Вместо этого вам нужно реализовать оператор присваивания. Для получения дополнительной информации см. http://en.wikipedia.org/wiki/Assignment_operator_%28C%2B%2B%29.
Затем вы можете сделать T = Triangle(X,Y,Z);
Для реализации оператора присваивания, вы можете сделать это:
Triangle& Triangle::operator= (const Triangle& other)
{
if (this != &other) // protect against invalid self-assignment
{
if (A != NULL) delete A;
if (B != NULL) delete B;
if (C != NULL) delete C;
A = new Point(other.A);
B = new Point(other.B);
C = new Point(other.C);
}
return *this;
}
Предполагая, что точка имеет конструкторы копирования. Для реализации конструкторы копирования, см http://en.wikipedia.org/wiki/Copy_constructor
копия конструктор выглядит следующим образом, но вы должны сделать это для Пункта:
Triangle& Triangle::Triangle(const Triangle& other)
: A(new Point(other.A)), B(new Point(other.B)), C(new Point(other.C))
{
}
}
Любые причины, по которым вы используете указатели для точек класса и принимаете аргументы конструктора по неконстантной ссылке? – chris
Вы не должны использовать конструктор в этой функции, а не если вы передаете «Треугольник» по ссылке. – Beta