История изменений
Исправление PPP328, (текущая версия) :
Наследование, сейчас покажу:
#include <stdio.h>
struct object {
int time;
};
struct cube {
struct object object;
int width;
};
struct ball {
struct object object;
int diameter;
};
static void print_object(struct object * object) {
printf("time = %d\n", object->time);
}
static void print_cube(struct cube * cube) {
printf("width = %d\n", cube->width);
}
static void print_ball(struct ball * ball) {
printf("diameter = %d\n", ball->diameter);
}
int main()
{
struct object object = { .time = 5 };
struct cube cube = { .object = { .time = 4 }, .width = 5 };
struct ball ball = { .object = { .time = 8 }, .diameter = 7 };
print_object(&object);
print_cube (&cube);
print_ball (&ball);
print_object((struct object *)&cube);
print_object((struct object *)&ball);
return 0;
}
time = 5
width = 5
diameter = 7
time = 4
time = 8
Совместимость указателей никого не волнует, можете макрос каста сделать.
Факт в том, что cube и ball - расширяют функционал object, если он идет первым.
Исходная версия PPP328, :
Наследование, сейчас покажу:
#include <stdio.h>
struct object {
int time;
};
struct cube {
struct object object;
int width;
};
struct ball {
struct object object;
int diameter;
};
static void print_object(struct object * object) {
printf("time = %d\n", object->time);
}
static void print_cube(struct cube * cube) {
printf("width = %d\n", cube->width);
}
static void print_ball(struct ball * ball) {
printf("diameter = %d\n", ball->diameter);
}
int main()
{
struct object object = { .time = 5 };
struct cube cube = { .object = { .time = 4 }, .width = 5 };
struct ball ball = { .object = { .time = 8 }, .diameter = 7 };
print_object(&object);
print_cube (&cube);
print_ball (&ball);
print_object((struct object *)&cube);
print_object((struct object *)&ball);
return 0;
}
About • FAQ • Blog • Terms of Use • Contact Us • GDB Tutorial • Credits • Privacy
© 2016 - 2020 GDB Online
Language
C
main.c
input
time = 5
width = 5
diameter = 7
time = 4
time = 8
Совместимость указателей никого не волнует, можете макрос каста сделать.
Факт в том, что cube и ball - расширяют функционал object, если он идет первым.