2016-01-19 3 views
-1

Здравствуйте, у меня есть class point, и задание должно сделать array of points (объекты того же класса), но класс имеет более одного конструктора. Как объявить, какой из них я хочу в своем массиве? Код:Объявить массив объектов, когда класс имеет более одного конструктора по умолчанию C++

class point 
{ 
private: 
    double pointX, pointY; 
    string color; 
    int form; 
public: 
    point(); 
    point(double, double, string color = "red", int form = 2); 
    point(string color = "red", int form = 2); 
    ~point() { 
     cout << "Deleting object point" << endl; 
    } 
    inline void print(); 
    inline void distance(); 
}; 

point::point(double x, double y, string color = "red", int form = 2) { 
    cout << "enter x coordinate of the point x = "; cin >> pointX; 
    cout << "enter y coordinate of the point y = "; cin >> pointY; 
} 

point::point(string color = "red", int form = 2) { 
    cout << "enter x coordinate of the point x = "; cin >> pointX; 
    cout << "enter y coordinate of the point y = "; cin >> pointY; 
} 

point::point() { 
    cout << "enter x coordinate of the point x = "; cin >> pointX; 
    cout << "enter y coordinate of the point y = "; cin >> pointY; 
    cout << "enter color of the point "; getline(cin, color); 
    cout << "enter number form 1 - 3 for the form of the point "; cin >> form; 
} 

inline void point::print() { 
    cout << "the x coordinate of the point is x = " << pointX << endl; 
    cout << "the y coordiante of the point is y = " << pointY << endl; 
    cout << "the color of the point is " << color << endl; 
    if (form = 1) cout << "the form is circle" << endl; 
    if (form = 2) cout << "the form is square" << endl; 
    if (form = 2) cout << "the form is cross" << endl; 
} 

inline void point::distance() { 
    double z; 
    z = sqrt(pointX*pointX + pointY*pointY); 
    cout << "distance between the point and the start of coordinate system is " << z << endl; 
} 

double pointDistatnce() { 
    double z, x, y; 
    point points = new point[4]; 
} 


!!! point points = new point[4];` // here must be the array of objects but it shows me error that "class point has more than one default constructor"? 

И я хочу использовать конструктор без параметров так, чтобы пользователь, чтобы построить свою собственную точку зрения. Вот ошибки из списка ошибок;

!! no suitable constructor exists to convert from "point  
!! class "point" has more than one default constructor 
+2

Как должен быть выбран компилятор между двумя конструкторами по умолчанию? – NathanOliver

+0

Сделайте свой класс одним однозначным конструктором по умолчанию. Только вы знаете, что вы хотите делать, когда аргументы не приводятся. Сделайте * one * вещь, которая делает это. – chris

+2

Класс не может иметь более одного конструктора по умолчанию, поэтому вопрос спорный. – juanchopanza

ответ

3

point(); объявляет конструктор по умолчанию. Точно так же point(string color = "red", int form = 2); Либо избавитесь от первого и просто используйте второе, либо избавитесь от значения по умолчанию для color во втором.

Редактировать, основываясь на дополнительной информации, которую вы отправили: Вы ищете компилятор, чтобы читать мысли программиста. Вы определили конструктор без параметров, который делает одно, но вы определили конструктор с двумя необязательными параметрами, которые делают другое. Когда конструктор вызывается и не задает никаких параметров, означает ли это, что он должен выполняться без параметров или это означает, что он должен выполняться со значениями по умолчанию для двух необязательных параметров.

Ничего из этого не меняет мой первоначальный ответ. Это просто означает, что вам нужно немного подумать, чтобы использовать этот ответ. В частичном коде, который вы изначально предоставили, можно было бы надеяться, что два конструктора, которые могут быть вызваны без параметров, были избыточными друг с другом, поэтому просто удаление избыточности исправит его. Но так как вы хотите, чтобы программист мог вызвать один из двух разных конструкторов, вам нужно подумать о том, как сообщить компилятору, какой из них следует использовать.

При переосмыслении вашего дизайна вы также должны отказаться от идеи использования cin внутри конструктора. Это не технически неправильный. Но это неплохая идея, что вы не должны этого делать.

Смежные вопросы