C++ moderno e alternativas em C

Polimorfismo e tabelas de funções

Polimorfismo dinâmico permite chamada comum implementada pelo tipo concreto.

O que é Polimorfismo e tabelas de funções?

Polimorfismo dinâmico permite chamada comum implementada pelo tipo concreto.

Escolha comportamento por interface comum.

Pontos importantes

  • Entenda primeiro o mecanismo em C.
  • Use RAII e semântica de valor para ownership.
  • Prefira abstrações type-safe a macros e casts.

Exemplos de código C e C++

C
Executar →
main.c
#include <stdio.h>

typedef struct Shape Shape;
struct Shape {
    double value;
    double (*area)(const Shape *shape);
};

double square_area(const Shape *shape) {
    return shape->value * shape->value;
}

int main(void) {
    Shape square = {4.0, square_area};
    printf("area=%.1f\n", square.area(&square));
}
Saída esperada
area=16.0
C++
Executar →
main.cpp
#include <iostream>

struct Shape {
    virtual double area() const = 0;
    virtual ~Shape() = default;
};

struct Square : Shape {
    double side;

    explicit Square(double value) : side(value) {}
    double area() const override { return side * side; }
};

int main() {
    Square square(4);
    const Shape& shape = square;
    std::cout << "area=" << shape.area() << '\n';
}
Saída esperada
area=16

Comparação entre C e C++

C constrói ponteiro e function table; virtual C++ gera dispatch semelhante e destrutor virtual seguro.

C

C usa prefixos, callbacks, macros e contextos explícitos.

C++

O idioma fornece abstrações com escopo, type-safe e de baixo custo.

Exercícios práticos

Execute as duas versões e modifique-as para observar suas garantias.

  • Escreva primeiro o mecanismo em C.
  • Substitua cleanup manual por RAII.
  • Meça alocações e dispatch virtual.