С ++ успадкування - недоступна база?


157

Здається, я не в змозі використовувати базовий клас як параметр функції, чи я зіпсував свою спадщину?

У моєму основному:

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

І клас класу, що успадковує від 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.