Наследование структуры в C

HTTPS (HTTP по SSL) отправляет все содержание HTTP по туннелю SSL, таким образом, содержание HTTP и заголовки шифруются также.

61
задан CajunLuke 18 January 2012 в 02:22
поделиться

7 ответов

Самое близкое, что вы можете найти, - это довольно распространенная идиома:

typedef struct
{
    // base members

} Base;

typedef struct
{
    Base base;

    // derived members

} Derived;

Поскольку Derived начинается с копии Base , вы можете сделать следующее:

Base *b = (Base *)d;

Где d - это экземпляр Derived . Так что они вроде полиморфны. Но наличие виртуальных методов - это еще одна проблема - для этого вам понадобится эквивалент указателя vtable в Base , содержащий указатели на функции, которые принимают Base в качестве своего первого аргумент (который вы можете назвать this ).

В этом случае вы также можете использовать C ++!

71
ответ дан 24 November 2019 в 17:03
поделиться

В C, в отличие от C ++, нет явной концепции наследования. Однако вы можете повторно использовать структуру в другой структуре:

typedef struct {
    char name[NAMESIZE];
    char sex;
} Person;

typedef struct {
    Person person;
    char job[JOBSIZE];
} Employee;

typedef struct {
    Person person;
    char booktitle[TITLESIZE];
} LiteraryCharacter;
42
ответ дан 24 November 2019 в 17:03
поделиться

Вы можете смоделировать это, но вы не можете на самом деле наследовать.

-2
ответ дан 24 November 2019 в 17:03
поделиться

Вы можете сделать вышеупомянутое

typedef struct
{
    // base members

} Base;

typedef struct
{
    Base base;

    // derived members

} Derived;

Но если вы хотите избежать преобразования указателя, вы можете использовать указатели на объединение из Base и Получено .

4
ответ дан 24 November 2019 в 17:03
поделиться

Нет, не можете. C не поддерживает концепцию наследования.

-4
ответ дан 24 November 2019 в 17:03
поделиться

Нет, вы не можете. imo лучший подход к ООП в C - это использование ADT .

-3
ответ дан 24 November 2019 в 17:03
поделиться

C не является объектно-ориентированным языком и, следовательно, не имеет наследования.

-1
ответ дан 24 November 2019 в 17:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: