C ++ наследование - недоступная база?


157

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

У меня есть следующее в моей главной:

int some_ftn(Foo *f) { /* some code */ };
Bar b;
some_ftn(&b);

И класс Bar наследуется от Foo таким образом:

class Bar : Foo
{
public:
    Bar();
    //snip

private:
    //snip
};

Разве это не должно работать? Кажется, я не могу сделать этот вызов в моей основной функции

Ответы:


287

Вы должны сделать это:

class Bar : public Foo
{
    // ...
}

Тип наследования по умолчанию classв C ++ - это privateтак, что любые члены publicи protectedчлены базового класса ограничены private. structнаследование с другой стороны publicпо умолчанию.


28

По умолчанию наследование является частным. Вы должны явно использовать public:

class Bar : public Foo


14
Для расширения: в classнаследство private. В structнаследовании publicпо умолчанию.
Трэвис Гокель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.