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

157

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

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

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

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

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

private:
    //snip
};

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

Bandai
источник

Ответы:

287

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

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

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

Эндрю Нойес
источник
28

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

class Bar : public Foo

Джим Бак
источник
14
Для расширения: в classнаследство private. В structнаследовании publicпо умолчанию.
Трэвис Гокель