2015-05-16 5 views
1

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

class Shape 
{ 
    private: 
    int center_x, int center_y; 
    public: 
    Shape (int x, int y) : center_x(x), center_y(y); {} //constructor initializer 
} 
class Rectangle : public Shape 
{ 
    private: 
    int length, width; 
    public: 
    Rectangle(): //this is where i have trouble, I am supposed to fill in missing code here 
    //but shape does not have a default constructor, what am i supposed to fill in here? 
    Rectangle (int x, int y, int l, int w) : Shape(x,y);{length = l; width = w;} 
} 

Благодаря

+0

Можете уточнить свой вопрос a немного? –

+0

Извините, я должен был добавить определения к указанным конструкторам, и когда они дали мне Rectangle():, я не знал, что заполнить после двоеточия. – ricefieldboy

+0

Близко связанный: http://stackoverflow.com/q/1711990/179910 –

ответ

0

Можно предположить, что координаты не определены для прямоугольника по умолчанию. Так было бы:

Rectangle(): Shape(x,y) , length(0), width(0) { } 
4

Существует два подхода. Либо вы вызываете базовый класс construcor в списке мем-инициализатора конструктора по умолчанию со значениями некоторых по умолчанию, как, например, (я использую нули в качестве значений по умолчанию):

Rectangle() : Shape(0, 0), length(0), width(0) {} 

Или вы можете делегировать всю работу от по умолчанию конструктор с параметрами.

Например

Rectangle() : Rectangle(0, 0, 0, 0) {} 

Примите во внимание, что определения класса должны заканчиваться точкой с запятой. :)

+0

Второе решение только для C++ 11 не так ли? – jpo38

+0

Спасибо, сэр, я бы поднял, но я, по-видимому, мне не хватает репутации – ricefieldboy

+1

@ jpo38 Да, это так. И какой год сейчас? :) –

1

Вы задаете неправильный вопрос. Вы должны спрашивать

Что должно быть построено по умолчанию Rectangle be?

После того, как вы ответите на этот вопрос, один из следующих произойдет:

  • станет ясно, как инициализировать Shape базу
  • Вы поймете, что Rectangle не должен иметь конструктор по умолчанию
  • Вы поймете, что что-то необходимо переделать
Смежные вопросы