Skip to Content
Aprende C++ moderno para finanças
book

Aprende C++ moderno para finanças

by Daniel Hanson
March 2025
Intermediate to advanced
430 pages
11h 4m
Portuguese (Portugal, Brazil)
O'Reilly Media, Inc.
Book available
Content preview from Aprende C++ moderno para finanças

Apêndice B. Corte de objectos

Outro ponto que foi adiado do Capítulo 3 é que as classes base abstractas podem evitar o corte de objectos, o que será agora explicado. No resultado do Apêndice A, tanto a classe Base como a Derived são concretas, ou seja, qualquer uma delas pode ser instanciada por si só:

#include <cmath>
#include <iostream>

class Base
{
public:
    virtual double trig_fcn(double x) const
    {
        return std::cos(x);
    }

    virtual ~Base() = default;

};

class Derived final : public Base
{
public:
    double trig_fcn(double x) const override
    {
        return std::sin(x);
    }

};

Supõe que agora criamos instâncias de cada um na pilha:

Base b;
Derived d;

Supõe também que temos uma função que recebe um argumento Base e avalia a função membro trig_fcn(.) para x = π e mostra o resultado no ecrã:

void slice_function(Base b)
{
    using std::cout, std::format;
    using namespace std::numbers;

    cout << format("slice_function(.): trig_fcn(pi) = {}\n",
        b.trig_fcn(pi));
}

Agora, chama esta função com b e d:

slice_function(b);
slice_function(d);

Obteríamos como resultado algo como isto:

slice_function(.): trig_fcn(pi) = -1
slice_function(.): trig_fcn(pi) = -1

Em ambos os casos, o resultado é essencialmente -1 (isto pode não ser exato devido à aritmética de vírgula flutuante), o resultado de std::cos(pi), apesar de podermos esperar 0 para std::sin(pi) a partir do objeto Derived d .

Se tentarmos passar um objeto derivado para uma função que recebe um objeto base por valor, o código será compilado, mas o objeto derivado ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Aprende Java, 6ª edição

Aprende Java, 6ª edição

Marc Loy, Patrick Niemeyer, Daniel Leuck
Aprende a usar a LangChain

Aprende a usar a LangChain

Mayo Oshin, Nuno Campos
Python Polars: O Guia Definitivo

Python Polars: O Guia Definitivo

Jeroen Janssens, Thijs Nieuwdorp

Publisher Resources

ISBN: 9798341637795Supplemental Content