2013-05-06 4 views
-3
class car 
{ 
    string carID 
    string carName 
}; 

class electric : public car 
{ 
    string battery 
    string model 
}; 

базовый класс - car. electric - производный класс, который наследуется от car. Что нужно включить в конструктор для их инициализации, а затем установить значения, когда пользователь вводит новый автомобиль с данными для всех атрибутов?C++ как инициализировать параметры в производных классах

+0

возможно дубликат http://stackoverflow.com/questions/120876/c-superclass-constructor-calling-rules – frickskit

+0

@frickskit: Не уверен, что это тот же самый вопрос .. он спрашивает о просто инициализация полей в его производном классе. – 2013-05-06 17:17:52

+0

запишите свои классы –

ответ

0

В вашей текущей модели вы фактически не можете получить доступ к любому полю автомобиля, потому что по умолчанию в C++ при использовании ключевого слова class все поля: private. Они должны быть protected или public, чтобы получить доступ к подклассам.

+0

Благодарим вас за ответ – user2355449

1

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

Derived::Derived(...):Base(...),<optional initizaliation of Derived members>{...} 

Например:

class car 
{ 
    string carID; 
    string carName; 
public: 
    car(string carid, string carname):carID(carid),carName(carname){} 
}; 

class electric : public car 
{ 
    string battery; 
    string model; 
public: 
    electric(string carid, string carname, string battery, string model) 
    :car(carid,carname),battery(battery),model(model){} 
}; 
+0

Благодарим вас за ответ. Как бы я определил заданную функцию, чтобы установить значения конкретного электромобиля, мне нужно будет вызвать конструктор автомобиля, а затем электрический? – user2355449

+0

Нет, вы всегда вызываете конструктор производного класса. Как вы можете видеть в приведенном ниже примере кода, конструктор производного класса вызывает конструктор базового класса во время инициализации. –

+0

извинения я пропустил. спасибо :) – user2355449

0

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

class car 
{ 
    string carID 
    string carName 
    public: 
     car (string id, string name): carID(id), carName(name) {} 
}; 

class electric : public car 
{ 
    string battery 
    string model 
    public: 
     electric (string id, string name, string b, string m): car(id, name), 
               battery(b), model(m){} 
}; 
+0

Благодарим вас за ответ – user2355449

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