Это было время, так как я использовал наследование C++, и мне интересно, если кто-то может прояснить и объяснить мне кое-что:разница между c.foo() и c.parent :: Foo()
class parent {
public:
int count;
parent() : count(0) {}
void increase_count() {count++;}
void print_count() {printf("Count: %d\n", count);}
};
class child : public parent {
private:
int other;
public:
child() : other(0) {}
};
int main (int argc, char *argv[]) {
child c;
for (int i = 0; i < 5; i++) {
c.print_count();
c.increase_count();
}
for (int i = 0; i < 5; i++) {
c.parent::print_count();
c.parent::increase_count();
}
}
Похоже, что c.<parent_function>()
и c.parent::<parent_function>()
- это то же самое. Этот синтаксис существует только для множественного наследования? Или есть какой-то нюанс, где даже без множественного наследования спецификатор области parent::
будет другим?
EDIT: Извините, но я должен был также предусмотреть ребенка, не имеющего метода с тем же именем.
Попробуйте сделать 'print_count' виртуальной и перегрузки его в' child', то вы увидите разницу. –
Использование квалифицированного имени метода в вызове будет подавлять полиморфизм, если метод является виртуальным. Но в вашем примере это не имело значения. – AnT
Прошу прощения, я хотел также указать, что у ребенка нет метода с тем же именем, но я забыл его включить. – dbeer