Структуруйте успадкування в C ++


Відповіді:


290

Так, structточно так само, classза винятком того, що доступність за замовчуванням призначена publicдля struct(поки це privateдля class).


129

Так. Спадщина за замовчуванням є загальнодоступною.

Синтаксис (приклад):

struct A { };
struct B : A { };
struct C : B { };

46

Крім того, що Алекс та Еван вже заявили, я хотів би додати, що структура C ++ не схожа на структуру C.

У C ++ структура може мати методи, успадкування тощо, як і клас C ++.


4
структура С ++ може бути схожою на структуру С. Коли він є, його називають POD - Plain Old Datatype. Це важлива відмінність, оскільки, наприклад, лише структури ПОД можуть бути частиною об'єднань.
camh

9
Але ПДД можуть мати методи, тому не є «схожими» на С структурами в тому сенсі, про який йде мова.
Стів Джессоп

Якщо це ПОД, у нього немає методів. Інакше назва безглузда.
RL-S

24

Звичайно. У C ++ структури та класи майже однакові (серед невеликих відмінностей є такі речі, як дефолт до публічного замість приватного).


23

У C ++ успадкування структури є таким самим, як і клас, за винятком наступних відмінностей:

При виведенні структури з класу / структуру специфікатор доступу за замовчуванням для базового класу / структури є загальнодоступним. А при виведенні класу специфікатор доступу за замовчуванням приватний.

Наприклад, програма 1 закінчується помилкою компіляції, а програма 2 працює чудово.

// Program 1
#include <stdio.h>

class Base {
    public:
        int x;
};

class Derived : Base { }; // Is equivalent to class Derived : private Base {}

int main()
{
    Derived d;
    d.x = 20; // Compiler error because inheritance is private
    getchar();
    return 0;
}

// Program 2
#include <stdio.h>

struct Base {
    public:
        int x;
};

struct Derived : Base { }; // Is equivalent to struct Derived : public Base {}

int main()
{
    Derived d;
    d.x = 20; // Works fine because inheritance is public
    getchar();
    return 0;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.