2015-03-20 4 views
1

У меня есть следующие объявления класса:C++ Наследование функций с таким же именем

class human 
{ 
    public: 
    void msg(){cout<<"I am human\n";} 
}; 
class John:public human 
{ 
    public: 
    void msg(){cout<<"I am a John\n";} 
}; 

Как видно классу John и human оба имеют функцию msg(). Очевидно, класс John наследует ресурсы от human. Теперь, когда я создаю объект производного класса и вызвать msg():

John a; 
a.msg(); 

Выход:

Я Джон

Но оленья кожа John наследует msg() от human?

Также существует способ доступа к msg() из human с использованием объекта производного класса?

EDIT:

Йуп вызова функции как и поможет мне

a.human::msg() 

Другой вопрос:

Кроме того, если я изменить класс следующим образом:

class human 
{ 
    protected: 
    void msg(){cout<<"I am human\n";} 
}; 
class John:public human 
{ 
    public: 
    void msg(){cout<<"I am a John\n";} 
}; 

Теперь, как я могу получить доступ к msg() от human.

ответ

4

«Но разве Иоанн не наследует msg() от человека?»

Да, но так оно и есть, но скрывает его своей собственной реализацией.

«Также есть способ доступа к msg() человека?»

Да, вы должны явно указать объем класса (до тех пор, human::msg() в общественном объеме, как это было первоначально просили):

John a; 
    a.human::msg(); 
// ^^^^^^^ 

Тот же синтаксис должен быть применен, если вы хотите доступ к human::msg() внутри класса John:

class John : public human { 
    public: 
    void msg() {cout<<"I am a John\n";} 
    void org_msg() { human::msg(); } 
}; 

John a; 
a.org_msg(); 

или другой альтернативный

John john; 
human* h = &john; 
h->msg(); 
Смежные вопросы