2015-10-10 2 views
0

Так что мне интересно, можно ли получить доступ к конструктору базового класса из объекта унаследованных классов? Что-то вроде:Можно ли получить доступ к конструктору базового класса из унаследованного объекта класса?

#include <iostream> 

class Foo 
{ 
public: 
    Foo(int i) 
    { 
     id = i; 
    } 
protected: 
    int id; 
}; 

class Bar: public Foo 
{ 
public: 
    void barFunc() 
    { 
     if (id>0) 
     { 
      std::cout << "Bar stuff" << std::endl; 
     } 
     else 
     { 
      std::cout << "Other Bar stuff" << std::endl; 
     } 
    } 
}; 

int main() 
{ 
    Foo fooObj(7); 
    Bar b; //is it possible to access 'id' in Bar whilst initializing 'id' in Foo? 
    b.barFunc(); 
} 

Если я просто запустить barFunc() объект б будет действовать, как если бы «идентификатор» не был инициализирован.

Имейте задание, и я не уверен, как работать с кодом, который они мне дали. Спасибо! :)

+0

Почему бы не попробовать скомпилировать код. Вам не хватает конструктора в 'Bar' (добавьте его или наследуйте) и используйте в объявлении' b'. Вы должны это исправить. –

+2

Действительно ли это скомпилировано? И да, это возможно, просто используйте список инициализаторов членов с помощью 'Bar's constructor. –

+0

Спасибо, да, я пропустил конструктор для Bar, извиняюсь, да, это сработало, но я оставил конструктор пустым и имел, если id не был инициализирован, не был инициализирован, то cout «id не был инициализирован». Это была просто небольшая вода, которую я пыталась сформулировать, это всего лишь несколько строк. Благодаря :) –

ответ

1

первым не создать конструктор соответствующий базовый класс:

Bar(int i) : Foo(i) { } 

затем

Bar b(1); 
b.barFunc(); 

и нет необходимости

Foo fooObj(7) 
0

Поскольку id является protected, вы можете получить к нему доступ в Bar.

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